如何确保类模板参数派生自特定类Foo?

Mar*_*rek 3 c++ templates

可能重复:
特定基类的C++类模板

class Base
{
...
};

class Derived1 : public Base
{
...
};

class Derived2 : public Base
{
...
};

class Unrelated
{
...
};
Run Code Online (Sandbox Code Playgroud)

我想要一个类模板ClassTemplate,它只接受类Derived1和Derived2作为参数,但不是Unrelated,所以我可以这样做:

ClassTemplate<Derived1> object1;

ClassTemplate<Derived2> object2;
Run Code Online (Sandbox Code Playgroud)

但我不应该这样做:

ClassTemplate<Unrelated> object3;
Run Code Online (Sandbox Code Playgroud)

有可能吗?

Geo*_*che 5

使用boost::is_base_ofBoost.TypeTraits:

template<class T> class ClassTemplate {
    BOOST_STATIC_ASSERT((boost::is_base_of<Base, T>::value));
};
Run Code Online (Sandbox Code Playgroud)