指向成员的指针作为模板参数推导

时间:2012-06-24 23:48:23

标签: c++ class templates parameters pointer-to-member

我想将指向成员的指针作为foo1的模板参数。这是代码:

struct baz{
    int qux;
};

template<typename C, typename T, T C::*m>
struct foo1{};

template<typename C, typename T>
void barr2(T C::*m){
}

template<typename C, typename T>
void barr1(T C::*m){
    barr2(m); // ok
    foo1<C, T, &baz::qux> _; // ok
    foo1<C, T, m> f; // g++4.6.1 error here; how to pass 'm' correctly ?
}

int main(){
    barr1(&baz::qux);
}

那它应该是什么样的?

1 个答案:

答案 0 :(得分:7)

它不适合您,因为您尝试在编译时表达式中使用运行时信息。它与使用从控制台读取的整数相同,以专门化模板。它并不意味着工作。

它不一定能解决您的问题,但如果barr1函数的意图是为了减轻打字负担,那么这样的事情可能适合您:

struct baz{
    int qux;
};

template<typename C, typename T, T C::*m>
struct foo1 {};

#define FOO(Class, Member)                                  \
    foo1<Class, decltype(Class::Member), &Class::Member>

int main(){
    FOO(baz, qux) f;
}