如何使用其他模板参数启用或禁用模板的继承?

时间:2016-06-21 00:06:26

标签: c++ templates crtp

我希望启用模板以通过CRTP包含功能,并且还使用相同的模板而不使用此功能,例如对于不包含CRTP模板所需功能的类。

使用std::conditional的以下代码有效:

#include <type_traits>

class NOCRTP{/*empty dummy class*/};
template <class T> class CRTP{/*addditional functionality here*/};

template<typename T, bool CRTP_ENABLED = true>
class Ok: public std::conditional<CRTP_ENABLED, CRTP<Ok<T> >, NOCRTP >::type{
};

没有std :: conditional通过附加模板参数的方式不会因为TYPE依赖于它自己。

template< typename T, typename TYPE> class Fail;
template< typename T, typename TYPE = CRTP< Fail<T,TYPE > > >
class Fail: public TYPE{
};

这可以通过某种前向声明来解决,还是std :: conditional解决方案唯一的方法?

0 个答案:

没有答案