1

クラステンプレートがあります

template<class T>
class A
{
};

そしてその専門分野の一つ

template<>
class A<B>
{
};

C が B のサブクラスの場合

class C : public B
{
};

どのインスタンス化が使用されA<C>ますか? 最初のものA<T>を使用する場合、2番目のものを使用させるにはどうすればよい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 に答える