簡體   English   中英

C++ 將指向成員的指針作為模板參數傳遞

[英]C++ pass pointer to member as template argument

我有一堆非常相似的功能:

void foo1(Obj o) {
    bar(o.a);
}

void foo2(Obj2 o) {
    bar(o.b);
}

void foo3(Obj3 o) {
    bar(o.c);
}

如何減少代碼重復? 我可以做這樣的事情:

template<typename T, pointerToMember>
void foo(T o) {
    bar(o.pointerToMember);
}

然后創建所有函數,如:

foo<Obj, Obj.x>;
...

?

是的,可以有一個指向成員的指針作為模板參數:

#include <string>

struct Obj {
    int a,b,c;
};

void bar(int x){}

template<typename T, int (T::*pointerToMember)>
void foo(T o) {
    bar(o.*pointerToMember);
}
int main() {
    Obj x;
    foo<Obj,&Obj::a>(x);
}

但是,有不同的方法可以使調用不那么冗長。 您可以將成員指針作為參數傳遞以推斷它,這將允許將其稱為

foo(x,&Obj::a);

最后同樣重要的是,您可以直接調用bar

bar(x.a);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM