C++ では、名前空間とグローバル スコープ以外のスコープでのメンバー テンプレートの特殊化は許可されていないようです (MS VSC++ エラー C3412)。しかし、私にとっては、基本クラスのプライマリ メンバー テンプレートを派生クラスで特殊化することは理にかなっています。これは、派生クラスが行うこと、つまり基本クラスでの特殊化だからです。たとえば、次の例を考えてみましょう。
struct Base
{
template <class T>
struct Kind
{
typedef T type;
};
};
struct Derived : public Base
{
/* Not Allowed */
using Base::Kind;
template <>
struct Kind <float>
{
typedef double type;
};
};
int main(void)
{
Base::Kind<float>::type f; // float type desired
Derived::Kind<float>::type i; // double type desired but does not work.
}
私の質問は、なぜそれが許可されていないのですか?