Ответ Тимо только позволяет вам специализировать класс в целом, а это означает, что компилятор не будет автоматически копировать функции-члены из базового типа в специализированный тип.
Если вы хотите специализировать определенный метод в классе, не создавая заново все остальное, это немного сложнее. Вы можете сделать это, передав в качестве аргумента шаблонную структуру с нулевым размером, например:
template<typename T> struct TypeHolder { };
template<typename T> class TemplateBase {
public:
void methodInterface() {
methodImplementation(TypeHolder<T>);
}
void anotherMethod() {
// implementation for a function that does not
// need to be specialized
}
private:
void methodImplementation(TypeHolder<int>) {
// implementation for int type
}
void methodImplementation(TypeHolder<float>) {
// implementation for float type
}
};
Компилятор вставит соответствующий methodImplementation
в methodInterface
, а также исключит структуру с нулевым размером, так что все будет так, как если бы вы сделали специализацию только для функции-члена.