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;
}

但是,所有显式特化都需要给出要特化的模板的名称,或者与模板在同一范围内。您不能像这样在派生类中编写显式特化。

于 2010-10-23T17:01:13.397 回答