我想知道,是否有任何优雅的方法(如 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/