我有一个课程模板
template<class T>
class A
{
};
和其专长之一
template<>
class A<B>
{
};
如果C是B的子类
class C : public B
{
};
A<C>
使用了哪个实例化?如果它使用第一个A<T>
,如何让它使用第二个A<B>
?
答案 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>
{};