1

在创建没有附加功能的类型时,我尝试使用using,而不是子类化或使用typedef

我有一个 CRTP 层次结构,我试图在树上传播具体类型。

GrandKid似乎编译得很好。有办法GrandKid_2上班吗?

错误信息

junk.cpp:18:26: error: ‘GrandKid_2’ was not declared in this scope

代码

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
}
4

1 回答 1

3

using, like typedef, 创建一个别名,而不是一个新类型。因此,您不能使用 GrandKid_2 来定义自己。

您肯定需要创建一个新类型:

struct GrandKid_2 : Child<GrandKid_2> {};

对了,你真的想做GrandKid_2自己的孩子吗?也许你的意思是using GrandKid_2 = Child<GrandKid>

于 2013-01-14T13:55:05.987 回答