1

我有一个班级模板

template<class T>
class A
{
};

及其专长之一

template<>
class A<B>
{
};

如果 C 是 B 的子类

class C : public B
{
};

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

4

2 回答 2

1

将使用主模板,因为A<B>它不匹配A<C>. 查看此问题以获取有关如何使其工作的建议:基于继承类的模板专业化

于 2013-09-11T04:17:15.300 回答
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>
{};
于 2013-09-11T04:17:33.827 回答