继承我要代表这样一个层次结构:CRTP从其默认实例
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 <无效>需要被实例化:
W<Y<>> wy;
W<Z> wz;
全部▲<牛逼>需要成为Y <void>的实例,如果可能的话,我宁愿不使用两个不同的名称来使其工作。 (这是我的最后手段)
问题是,我不知道如何使这项工作。上面的代码显然不能按预期工作,也不会编译。有没有一种方法可以使其发挥作用,或者除了我已经提到的方法之外,您是否还有其他方法的建议?
你到底想达到什么目的? 'std :: enable_if'不会触发SFINAE,而是一个硬错误。与'static_assert(std :: is_base_of :: value)'' –
2013-05-03 16:54:35
没有太大差别我不想在这里使用SFINAE,它应该会触发一个硬错误。 – 2013-05-03 18:06:38
然后,如果它被声明为'static_assert',它会更清晰:)从编译器的角度来看效果将是相同的,但对其他维护者来说更清楚。 – 2013-05-03 18:19:43