我想知道,是否有任何优雅的方式(如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从A继承为public时才起作用:
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
提前致谢!!!
答案 0 :(得分:7)
你可以尝试我在这里说的话: 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 );
}
答案 1 :(得分:1)
私有地继承任何东西是一个实现细节。
在重构和代码分析期间,如果对外部功能无法进行此类检测,我会更高兴...