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

Pointer-to-member as template parameter deduction

本文关键字:参数 成员 指针      更新时间:2023-10-16

我想将指向成员的指针作为指向 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);
}

那么它应该是什么样子的呢?

它对您不起作用,因为您正在尝试在编译时表达式中使用运行时信息。这与使用从控制台读取的整数来专门化模板相同。它不是为了工作。

它不一定能解决你的问题,但如果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;
}