0

次のような階層を表す必要があります。

template<typename T>
struct X
{
};

template<typename Derived = void>
struct Y : Y<void>
{
    //Note: not trying to use SFINAE here
    using DerivedType = typename std::enable_if<std::is_base_of<Y, Derived>::value, Derived>::type;
};
template<>
struct Y<void> : X<Y<void>>
{
};

struct Z : Y<Z>
{
};

Z と Y<void> の両方がインスタンス化可能である必要があります。

W<Y<>> wy;
W<Z> wz;

すべての Y<T> は Y<void> のインスタンスである必要があり、可能であれば、それを機能させるために 2 つの異なる名前を持たないようにしたいと考えています。(それが私の最後の手段です)

問題は、これを機能させる方法がわからないことです。上記のコードは明らかに意図したとおりに動作せず、コンパイルされません。私がそれを機能させる方法はありますか、または私がすでに述べたもの以外の代替案はありますか?

4

1 に答える 1