Как насчет перегрузки
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, подобном этому.