构件和模板参数语法上的指针
pointer on a member and template parameter syntax
说我们有一个结构模板参加课程,并且在此类上有一个指针:
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有效,但事实并非如此
&A::a
是 value ,而不是 type 。因此,模板声明没有任何意义。
这可能是如何工作的:
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;