我需要代表这样的层次结构:
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&lt; void&gt;需要是可实例化的:
W<Y<>> wy;
W<Z> wz;
所有Y&lt; T&gt;需要是Y&lt; void&gt;的实例,如果可能的话,我宁愿不要有两个不同的名称来使它工作。 (这是我的最后一招)
问题是,我不知道如何使这项工作。上面的代码显然不能按预期工作,也不能编译。有没有办法可以让它发挥作用,或者除了我已经提到的那个之外,你是否有任何替代方案的建议?
答案 0 :(得分:3)
如何重新排序:
template <typename> struct Y;
template <> struct Y<void> : X<Y<void>> { };
template <typename T = void> struct Y : Y<void> { };