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);