クラステンプレートがあります
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>
{};