Angenommen, alle Klassen einer Hierarchie implementieren eine Template-Member-Funktion g
. Alle Klassen teilen dieselbe Implementierung von zwei anderen Funktionen f1
und f2
, die diese Vorlage aufrufen:
Da die Implementierungen von f1
und f2
in allen Klassen identisch sind, wie kann ich den doppelten Code loswerden und trotzdem den polymorphen Aufruf in main
wie erwartet ausführen lassen (dh die Ausgabe "In B ")?
Beachten Sie, dass die Implementierungen von f1
und f2
in A
, B
und C
nicht identisch sind. Lassen Sie es auf f1
s beschränken. Einer ruft eine Funktion namens ::A::g<int>
auf, ein anderer ruft eine Funktion mit dem Namen ::B::g<int>
auf, und der dritte ruft eine Funktion namens ::C::g<int>
auf. Sie sind sehr weit von identisch.
Das Beste, was Sie tun können, ist eine CRTP -Stil-Basis:
%Vor%Sie können nur die klassenspezifischen Dinge, die die Template-Funktion verwendet, herausfiltern, wie (in Ihrem Beispiel) den Klassennamen:
%Vor%Tags und Links c++ polymorphism