c++ - 从 template<base> 派生所有 template<derived> 实例

标签 c++ templates inheritance c++11

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

在代码中:

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_of 一起使用从 Templ<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++ - 从 template<base> 派生所有 template<derived> 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25060065/

相关文章:

c++ - 仅调用一次构造函数的数组初始化

c++ - 为什么在模板类静态辅助函数中调用全局函数会导致链接器错误,但在非静态成员函数中不会调用?

c# - WPF 绑定(bind) View 作为内容

javascript - 在 JavaScript 中使用原型(prototype)在现实世界中有什么优势吗?

C++:二进制搜索编译错误

c++ - 命名空间类的操作重载

c++ - C++ 中的父子关系

c++ - 使用 std::enable_if<> 的模板特化

java - Apache Isis jdoqlFromClause 多级继承验证错误

class - 如何在 UML 图中描述 Either/Or 继承?