C ++ шаблонная специализация - PullRequest
3 голосов
/ 23 октября 2010

Hello! Кто-нибудь знает способ добиться или подражать следующему поведению? (этот код приводит к ошибке времени компиляции).

Например, я хочу добавить конкретную специализацию шаблона только в производные классы.

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

1 Ответ

7 голосов
/ 23 октября 2010

Как насчет перегрузки

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

Явные специализации не могут быть добавлены таким образом в вашем примере. Кроме того, ваш базовый класс плохо сформирован, так как вы должны определить любую явную специализацию вне области действия класса

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

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

Все явные специализации должны давать название шаблона, который должен быть специализированным, или находиться в той же области, что и шаблон. Вы не можете просто написать явную специализацию в классе Derived, подобном этому.

...