3

こんにちは!誰かが次の動作を達成またはエミュレートする方法を知っていますか? (このコードはコンパイル時エラーになります)。

たとえば、派生クラスにのみ特定のテンプレートの特殊化を追加したいと思います。

struct Base {
   template <typename T> void Method(T a) {
      T b;
   }

   template <> void Method<int>(int a) {
      float c;
   }
};

struct Derived : public Base {
   template <> void Method<float>(float a) {
      float x;
   }
};
4

1 に答える 1

7

オーバーロードはどうですか

struct Base {
   template <typename T> void Method(T a) {
      T b;
   }

   void Method(int a) {
      float c;
   }
};

struct Derived : public Base {
   using Base::Method;
   void Method(float a) {
      float x;
   }
};

あなたの例では、明示的な特殊化をそのように追加することはできません。さらに、クラスのスコープ外で明示的な特殊化を定義する必要があるため、Baseクラスの形式が正しくありません。

struct Base {
   template <typename T> void Method(T a) {
      T b;
   }
};

template <> void Base::Method<int>(int a) {
   float c;
}

ただし、すべての明示的な特殊化では、特殊化するテンプレートの名前を指定するか、テンプレートと同じスコープ内にある必要があります。そのようなDerivedクラスに明示的な特殊化を記述することはできません。

于 2010-10-23T17:01:13.397 に答える