创建没有其他功能的类型时,我尝试使用using
,而不是使用typedef
进行子类化。
我有一个CRTP层次结构,我试图在树上传播具体类型。
GrandKid
似乎编译得很好。有没有办法让GrandKid_2
起作用?
错误消息
junk.cpp:18:26: error: ‘GrandKid_2’ was not declared in this scope
CODE
template<typename T>
struct Parent
{
};
template<typename T>
struct Child
: public Parent<T>
{
};
struct GrandKid :
public Child<GrandKid>
{
};
// using GrandKid_2 = Child<GrandKid_2>; // doesn't compile
int
main( int argv, char* argc[] )
{
GrandKid gk; // ok
}
答案 0 :(得分:3)
using
一样, typedef
会创建一个别名,而不是新类型。因此,您无法使用GrandKid_2来定义自己。
您肯定需要创建一个新类型:
struct GrandKid_2 : Child<GrandKid_2> {};
顺便问一下,你真的希望 GrandKid_2
成为自己的孩子吗?也许你的意思是using GrandKid_2 = Child<GrandKid>