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のようtypedefに、新しいタイプではなくエイリアスを作成します。したがって、GrandKid_2 を使用してそれ自体を定義することはできません。

新しいタイプを作成する必要があります:

struct GrandKid_2 : Child<GrandKid_2> {};

ところで、あなたは本当にGrandKid_2自分の子供になりたいですか?多分あなたは意味したusing GrandKid_2 = Child<GrandKid>

于 2013-01-14T13:55:05.987 に答える