如何确定使用哪个类专业化?

时间:2013-09-11 04:09:20

标签: c++ templates

我有一个课程模板

template<class T>
class A
{
};

和其专长之一

template<>
class A<B>
{
};

如果C是B的子类

class C : public B
{
};

A<C>使用了哪个实例化?如果它使用第一个A<T>,如何让它使用第二个A<B>

2 个答案:

答案 0 :(得分:1)

将使用主要模板,因为A<B>A<C>不匹配。请查看此问题,了解如何使其发挥作用的建议:Template specialization based on inherit class

答案 1 :(得分:1)

这些方面的东西:

template <typename T, bool isB>
class AHelper {
  // generic implementation
};

template <typename T>
class AHelper<T, true> {
  // specialization for B
};

template <typename T>
class A : public AHelper<T, std::is_base_of<B, T>::value>
{};