Я хотел бы определить класс шаблона со специализацией некоторых методов для разных типов.Использовать шаблон с базовым классом как параметр
template <typename T>
class Handler {
public:
void method1() { method2(); }
protected:
void method2();
}
Затем в файле реализации:
template <> Handler<int>::method2() { doSomething(); }
template <> Handler<float>::method2() { doSomethingElse(); }
template <> Handler<ClassB>::method2() { doSomethingDifferent(); }
До сих пор все работает нормально.
Теперь я хотел бы определить некоторые новые классы, полученные из ClassB, и использовать специализированную специализацию по объектам этих классов. Конечно, он компилируется, но не связывается, потому что специализация для каждого подкласса отсутствует.
Есть ли способ использовать шаблон для них, например, используя SFINAE?
Вы можете включать в свой код шаблона в файле заголовка - Thats, вероятно, не то, что вы ищет хотя – tobspr
Специализация шаблона концептуально отличается от наследования. У вас не может быть шаблон с функцией-членом, которая не определена, и ожидать, что она будет работать так. Возможно, вы ищете [CRTP] (https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern)? Если нет, пожалуйста, уточните, чего вы пытаетесь достичь. – jPlatte