C++ 成员和模板参数语法上的指针
假设我们有一个接受类的结构模板,以及该类上一个成员的指针:C++ 成员和模板参数语法上的指针,c++,templates,C++,Templates,假设我们有一个接受类的结构模板,以及该类上一个成员的指针: struct A<A,&A::a> 结构A 我不能像那样声明模板 template<class T,class U> struct{}; 模板 结构{}; 我得写信 template<class T,typename T::type var> struct{}; 模板 结构{}; 为什么&A::A不能绑定到简单的类型名t语法中?在成为成员上的指针之前,&a::a是一种类型,因此我们
struct A<A,&A::a>
结构A
我不能像那样声明模板
template<class T,class U>
struct{};
模板
结构{};
我得写信
template<class T,typename T::type var>
struct{};
模板
结构{};
为什么&A::A
不能绑定到简单的类型名t
语法中?在成为成员上的指针之前,&a::a
是一种类型,因此我们可以期望一个简单的类型名T可以工作,但事实并非如此。&a::a
是一个值,而不是一种类型。因此,模板声明毫无意义
下面是它的工作原理:
template <typename A, int A::* Ptr> struct Foo { };
struct Bar { int n; };
int main()
{
Foo<Bar, &Bar::n> f;
}
模板结构Foo{};
结构条{int n;};
int main()
{
福福;
}
或者,更一般地说
template <typename T, typename U, U T::* Ptr> struct Foo { };
Foo<Bar, int, &Bar::n> f;
模板结构Foo{};
福福;