mir*_*irt 3 c++ parameters templates class 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);
}
Run Code Online (Sandbox Code Playgroud)
那应该怎么样?
小智 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;
}
Run Code Online (Sandbox Code Playgroud)