Funktionsschablonenspezialisierung in der abgeleiteten Klasse

9

Ich habe eine Basisklasse mit einer Funktionsvorlage.

Ich leite von der Basisklasse ab und versuche, eine Spezialisierung für die Funktionsvorlage in der abgeleiteten Klasse zu haben

Ich habe so etwas gemacht.

%Vor%

und in .cpp-Datei Ich habe eine Implementierung für die Template-Spezialisierung bereitgestellt.

Dies funktioniert gut mit MSVC 8.0 und g ++ - 4.4.2 beschwert sich über Mangel an Function Deklaration Spaß in abgeleiteten Klasse.

Ich weiß nicht, welcher Compiler sich korrekt verhält. Jede Hilfe in diesem wird sehr geschätzt.

Vielen Dank im Voraus, Surya

    
Surya 18.12.2009, 13:21
quelle

4 Antworten

5

Sie müssen die Funktion in Derived deklarieren, um sie überladen zu können:

%Vor%

Beachten Sie, dass Sie die Spezialisierung möglicherweise inline einfügen oder in eine Implementierungsdatei verschieben müssen. In diesem Fall müssen Sie die Spezialisierung in der Headerdatei folgendermaßen prototypieren:

%Vor%

andernfalls verwendet der Compiler die verallgemeinerte Version von 'fun', um Code zu generieren, wenn er aufgerufen wird, anstatt mit der Spezialisierung zu verknüpfen.

    
Adam Bowen 18.12.2009, 13:42
quelle
1

Warum können Sie nicht

? %Vor%

g++ 's Fehlermeldung sieht für mich richtig aus. fun wird in Base und nicht in Derived deklariert.

    
Andreas Brinck 18.12.2009 13:30
quelle
0

g ++ verhält sich korrekt, weil Spaß in Base definiert ist.

    
WolfgangA 18.12.2009 13:54
quelle
-1

Eine alternative Option wäre auch eine einfache Nicht-Template-Funktion in Derived ...

%Vor%     
Leandro T. C. Melo 18.12.2009 13:46
quelle

Tags und Links