Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;将指向成员的指针作为模板参数传递_C++_Templates - Fatal编程技术网

C++ C++;将指向成员的指针作为模板参数传递

C++ C++;将指向成员的指针作为模板参数传递,c++,templates,C++,Templates,我有一系列非常相似的函数: void foo1(Obj o){ 酒吧(海外); } 无效foo2(Obj2 o){ 巴(离岸价); } void foo3(Obj3 o){ 巴(澳币); } 如何减少代码的重复?我可以做一些类似于: 模板 空富(TO){ 杆(o.pointerToMember); } 然后创建所有函数,如: foo<Obj, Obj.x>; ... foo; ... ?是可以将指向成员的指针作为模板参数: #include <string> s

我有一系列非常相似的函数:

void foo1(Obj o){
酒吧(海外);
}
无效foo2(Obj2 o){
巴(离岸价);
}
void foo3(Obj3 o){
巴(澳币);
}
如何减少代码的重复?我可以做一些类似于:

模板
空富(TO){
杆(o.pointerToMember);
}
然后创建所有函数,如:

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

是可以将指向成员的指针作为模板参数:

#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);
}
最后,您可以直接调用
bar

bar(x.a);

什么是
a
b
c
?为什么不直接传递它们呢?请包括一个什么是
foo1
foo2
foo3
的目的?为什么不直接调用
bar
?为什么不将指向成员的指针设为函数参数<代码>模板void foo(to,ut::*foo){bar(o.*foo);}
bar(x.a);