指针到成员作为模板参数推导(Pointer-to-member as template parame

2019-09-18 11:13发布

我想指针到成员作为模板参数的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);
}

因此,如何应该是什么样子?

Answer 1:

因为你试图在编译时表达式中使用运行时信息它不为你工作。 这是一样的使用从控制台读取专门的模板整数。 这并不意味着工作。

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


文章来源: Pointer-to-member as template parameter deduction