[英]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.