c++ - 如何在编译时验证模板类是从给定类派生的?

标签 c++ templates inheritance compiler-errors

我想知道,是否有任何优雅的方法(如 this )来检查模板参数是否派生自给定的类? 一般而言:

template<class A, class B>
class MyClass
{
    // shold give the compilation error if B is not derived from A
    // but should work if B inherits from A as private
}

另一个question中提供的解决方案仅当 B 作为公共(public)继承自 A 时才有效:

class B: public A

然而,我宁愿没有这样的约束:

class A{};
class B : public A{};
class C : private A{};
class D;
MyClass<A,B> // works now
MyClass<A,C> // should be OK
MyClass<A,D> // only here I need a compile error

提前致谢!!!

最佳答案

你可以像我在这里说的那样尝试: C++: specifying a base class for a template parameter 在静态断言中(C++0x 或 BOOST_STATIC_ASSERT)

template<class A, class B> 
class MyClass 
{ 
  static_assert( boost::is_base_of<A,B>::value );
}

关于c++ - 如何在编译时验证模板类是从给定类派生的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5902730/

相关文章:

inheritance - Kotlin 属性不能被子接口(interface)覆盖

Java:摆脱复制粘贴静态方法的使用

c++ - ./lib/gcc/x86_64-linux-gnu/4.6/libstdc++.a 的用法是什么

C++ 11 - 当我将局部变量作为参数传递给线程时是否安全

c++ - 在 C++ 中只读 1 个字符

C++从一个数组添加到另一个数组,每次我向另一个数组添加元素时查看另一个数组

c++ - 拒绝包含某些公共(public)静态数据成员的类型

c++ - enable_if 似乎在类外工作但不在类内

c++ - 类型特征以获取 std::array 或 C 风格数组的元素类型

java - 为什么调用父类方法?