Ich möchte eine Vorlage-Klasse mit Spezialisierung von einigen Methoden für verschiedene Typen definieren.Verwenden Sie Vorlage mit Basisklasse als Parameter
template <typename T>
class Handler {
public:
void method1() { method2(); }
protected:
void method2();
}
dann in der Implementierungsdatei:
template <> Handler<int>::method2() { doSomething(); }
template <> Handler<float>::method2() { doSomethingElse(); }
template <> Handler<ClassB>::method2() { doSomethingDifferent(); }
Bisher funktioniert alles ok.
Nun möchte ich einige neue Klassen definieren, die von ClassB abgeleitet sind, und die Template-Spezialisierung auf Objekte dieser Klassen verwenden. Natürlich kompiliert es, verbindet aber nicht, da die Spezialisierung für jede Unterklasse fehlt.
Gibt es eine Möglichkeit, die Vorlage für diese zu verwenden, zum Beispiel mit SFINAE?
Sie könnten Ihre Template-Code in Ihre Header-Datei - das ist wahrscheinlich nicht das, was du bist Suche nach, obwohl – tobspr
Vorlage Spezialisierung unterscheidet sich konzeptionell von Vererbung. Sie können keine Vorlage mit einer Mitgliedsfunktion haben, die nicht definiert ist, und erwarten, dass sie so funktioniert. Suchen Sie vielleicht nach [CRTP] (https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern)? Wenn nicht, seien Sie bitte klarer, was Sie erreichen möchten. – jPlatte