成员和模板参数语法上的指针

时间:2012-10-23 14:07:59

标签: c++ templates

说我们有一个带有类的结构模板,以及一个指向该类成员的指针:

struct A<A,&A::a>

我不能像那样声明模板

template<class T,class U>
struct{};

我必须写

template<class T,typename T::type var>
struct{};

为什么&A::a无法绑定到简单的typename T语法中?在成为成员的指针之前,&A::a是一种类型,所以我们可以期望一个简单的类型名称T可以工作,但事实并非如此

1 个答案:

答案 0 :(得分:2)

&A::a,而不是类型。所以模板声明毫无意义。

以下是它的工作原理:

template <typename A, int A::* Ptr> struct Foo { };

struct Bar { int n; };

int main()
{
    Foo<Bar, &Bar::n> f;
}

或者,更一般地说,

template <typename T, typename U, U T::* Ptr> struct Foo { };

Foo<Bar, int, &Bar::n> f;