template <typename T>
class Test
{
};
class A : public X;
class B;
Test<A> a; // OK
Test<B> b; // NOT OK
我想完成这样的事情。
也许这可以更轻松地完成。基本上,我需要的是:模板类T应该能够在类型为T的对象中锁定std :: mutex成员m_mutex。
答案 0 :(得分:7)
使用静态断言和相应的type trait class:
#include <type_traits>
template <typename T>
class Test
{
static_assert( std::is_base_of<X,T>::value, "T doesn't derive from X!");
};
答案 1 :(得分:3)
您可以使用std::is_base_of<>
进行SFINAE检查:
template<
typename T,
typename = typename std::enable_if<std::is_base_of<X, T>::value>::type
>
class Test {
...
};