クラステンプレートがあります
template<class T>
class A
{
};
そしてその専門分野の一つ
template<>
class A<B>
{
};
C が B のサブクラスの場合
class C : public B
{
};
どのインスタンス化が使用されA<C>ますか? 最初のものA<T>を使用する場合、2番目のものを使用させるにはどうすればよいA<B>ですか?
A<B>は に一致しないため、プライマリ テンプレートが使用されA<C>ます。それを機能させる方法に関する提案については、この質問を見てください:継承クラスに基づくテンプレートの特殊化
これらの行に沿ったもの:
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>
{};