Angenommen, Sie haben den Code
%Vor%Child und NotWorkingChild unterscheiden sich nur durch den typedef. In GCC kompilieren beide in Visual Studio den Konstruktor von NotWorkingChild den folgenden Fehler:
%Vor%Können Sie erklären, warum das so ist? Gibt es eine bessere portable Lösung als die Typedef?
Danke!
Die Fehlermeldung ist, weil NotWorkingChild
(indirekt) von SCEST<int>
abgeleitet wird, was SCEST
im Bereich von NotWorkingChild
auf die Klasse SCEST<int>
anstatt auf die Vorlage verweist. MSVC ist korrekt, dies abzulehnen, und GCC4.5 sollte dies auch ablehnen (GCC4.5 hat eine korrektere Suche nach Klassennamen).
Hier ist eine Lösung, die für beide Compiler funktionieren könnte
%Vor% Beachten Sie, dass wir den Operator für die Bereichsauflösung verwenden und ein Leerzeichen vor ::
setzen müssen (das Token <:
wird andernfalls als Digraph verwendet).
Aktuelle Nachrichten : C ++ 0x wird die oben genannten Aufgaben erledigen, selbst wenn Sie EST16<SCEST>
ausführen. Der Grund ist, dass es besagt, dass wenn der Name der injizierten Klasse an einen Template-Template-Parameter übergeben wird, der Name der injizierten Klasse als Vorlage und nicht als Typ behandelt wird. Daher wäre GCC für C ++ 0x der Compiler, der es richtig macht.
Es wird auf VS kompiliert, wenn Sie den Initialisierer so ändern, dass er nur auf den Namen der Vorlagenklasse, EST16, verweist. I.e .:
%Vor%Tags und Links c++ gcc visual-studio templates