Polymorpher Funktionsaufruf ohne doppelten Code

8

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:

%Vor%

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 ")?

    
AlwaysLearning 25.03.2016, 12:46
quelle

2 Antworten

3

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%     
Angew 25.03.2016 12:55
quelle
1

Sie können nur die klassenspezifischen Dinge, die die Template-Funktion verwendet, herausfiltern, wie (in Ihrem Beispiel) den Klassennamen:

%Vor%     
Cheers and hth. - Alf 25.03.2016 13:03
quelle

Tags und Links