Template-Funktion nur für Klassen definieren, die von einer einzelnen Base abgeleitet sind

8

Ich habe eine Basisklasse Base , von der viele andere Klassen abgeleitet werden. Ich würde gerne definieren:

%Vor%

Aber nur für Klassen, die von Base abgeleitet sind. Ich brauche alle zuvor definierten operator<< für andere Typen. Wie geht das? Ist das möglich?

Ich kann ostream &operator<< (ostream &o, Base &base) nicht erstellen, weil ich den genauen Typ brauche, der in einigen Typeigenschaften verwendet werden soll. Gibt es eine Möglichkeit, den abgeleiteten Typ zu "schieben", während der Wert als Basistyp übergeben wird?

    
Juraj Blaho 24.02.2011, 18:11
quelle

4 Antworten

6
Anycorn 24.02.2011, 18:15
quelle
2

Sie können Typeigenschaften und SFINAE verwenden, um nur von Base abgeleitete Klassen in Ihre Funktion zu lassen:

%Vor%     
Maxim Egorushkin 24.02.2011 18:23
quelle
2

Eine weitere Option besteht darin, von einer Markierungsvorlage

abzuleiten %Vor%

Dann leite sie von beiden ab

%Vor%

Jetzt können Sie es als

schreiben %Vor%

Der Vorteil ist seine Einfachheit. Und wenn Base bereits als Vorlage verwendet wird, ist es sogar noch nützlicher (ich nehme an, dass dies für Ihren Code nicht der Fall ist).

    
Johannes Schaub - litb 24.02.2011 18:30
quelle
1

Sie können die is_base_of -Klassenvorlage verwenden, um sicherzustellen, dass nur abgeleitete Klassen von Base operator<< :

aufrufen können %Vor%

Sie finden die Definition von is_base_of in einem anderen Thema bei stackoverflow selbst: hier klicken

Und hier ist die Definition von static_assert :

%Vor%     
Nawaz 24.02.2011 18:16
quelle

Tags und Links