是否可以从以基类为参数的实例化中派生出所有以派生类为参数的模板实例化?

在代码中:

class Base{};

class Derived1 : Base{};

class Derived2 : Base{};

template<typename T>
class Templ /*: Templ<Base> if T derives from Base*/
{};

那怎么办呢?

最佳答案

Templ<Base> 进行特化,然后使用 SFINAE 和 std::is_base_ofTempl<Base> 派生出单独的特化。

template<typename T, typename V = void>
class Templ
{};

template<>
class Templ<Base>
{};

template<bool B, typename R = void>
using enable_if_t = typename std::enable_if<B, R>::type;

template<typename T>
class Templ<T, enable_if_t<std::is_base_of<Base, T>::value>>
    : public Templ<Base>
{};

关于c++ - 从模板<基>派生所有模板<派生>实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25060065/

10-11 04:37