专门用于获取指向特定类或指向派生类对象的指针的模板类

saj*_*jas 2 c++ templates template-specialization

我如何专门化类模板,以便模板参数可以是类型:指向特定类的指针或指向该特定类型的派生类的指针?是否可以在不使用Boost的情况下完成?

可能重复: 仅接受某些类型的C++模板

我只是想知道即使我使用指向实例的指针,答案是否相同.

Jos*_*eld 5

你可以专注你的类指针,然后用std::is_base_ofstatic_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");
};
Run Code Online (Sandbox Code Playgroud)

看到它在行动.既std::is_base_ofstatic_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>
{
  // ...
};
Run Code Online (Sandbox Code Playgroud)