c++ - 我可以指定模板参数应该是某个基类的子类吗?

标签 c++ templates

我有一个设计用于处理特定类型参数的类。有什么办法可以强制模板参数是指向某种类型的子类的指针吗?

最佳答案

#include <type_traits>
#include <utility>

struct B { };
struct D : B { };

template <typename T>
struct S {
    typedef typename std::enable_if<std::is_base_of<B, T>::value>::type check;
};

int main()
{
    S<B> x;   // Ok!
    S<D> y;   // Ok!
    S<int> z; // Not ok!
}

enable_if 实用程序和 is_base_of 类型特征是 C++0x 标准库的一部分,但在 Boost 中也可用。

关于c++ - 我可以指定模板参数应该是某个基类的子类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5657898/

相关文章:

c++ - 从 CPU 到设备的结构 vector 的深度复制

C++:如何在类和基元上使用模板?

c++ - 使用另一个类的模板参数实例化一个模板类

c++ - 重载 == 运算符导致丢弃限定符错误

c++ - 用 Armadillo 在 C++ 中定义全局矩阵变量

c++ - codelite 5.1 找不到 <QString>

c++ - 防止非常量左值解析为右值引用而不是 const 左值引用

c++ - 如何在崩溃时关闭程序,没有任何警告屏幕等... C++ Windows

c++ - 如何包装 std::function 并轻松访问其返回和参数类型?

c++ - 创建和调用空函数