saj*_*jas 2 c++ templates template-specialization
我如何专门化类模板,以便模板参数可以是类型:指向特定类的指针或指向该特定类型的派生类的指针?是否可以在不使用Boost的情况下完成?
可能重复: 仅接受某些类型的C++模板
我只是想知道即使我使用指向实例的指针,答案是否相同.
你可以专注你的类指针,然后用std::is_base_of用static_assert:
template <typename T>
class foo;
template <typename T>
class foo<T*>
{
  static_assert(std::is_base_of<Base, T>::value, "Type is not a pointer to type derived from Base");
};
看到它在行动.既std::is_base_of和static_assert被C++ 11个特征,从而没有升压是必需的.
如果由于某种原因你不喜欢static_assert,你可以这样做enable_if:
template <typename T, typename Enable = void>
class foo;
template <typename T>
class foo<T*, typename std::enable_if<is_base_of<Base, T>::value>::type>
{
  // ...
};