den folgenden Code Gegeben:Mitglied Vorlage in lokaler Klasse
void f()
{
class A
{
template <typename T>
void g() {}
};
}
g ++ 4.4 (und auch g++-4.6 -std=gnu++0x
) klagt: "ungültige Erklärung der Mitgliedsvorlage in lokaler Klasse".
Offenbar dürfen lokale Klassen keine Template-Member haben. Was ist der Zweck dieser Beschränkung? Wird es in C++ 0x entfernt?
Hinweis: Wenn ich die lokale Klasse selbst eine Vorlage machen, anstatt ihm eine Vorlage Mitglied geben:
void f()
{
template <typename T>
class A
{
void g() {}
};
}
erhalte ich „Fehler: eine Template-Deklaration im Block Umfang erscheint nicht“.
Ich stieß auf diese alte Frage, während ich mit g ++ - 4.6 kämpfte. Es beschwert sich immer noch, also habe ich die Frage etwas bearbeitet. Hoffentlich bekommen wir mehr Antworten! –
@AaronMcDaid: Leider gibt es zu diesem Zeitpunkt nicht viel mehr zu sagen. Wie litb in seinem Kommentar zu Crazy Eddies Antwort darauf hinwies, fügte C++ 11 ** nicht ** Unterstützung für lokale Klassen hinzu, die Templates sind oder Template-Member haben (Unterstützung für die Verwendung lokaler Klassen als Template-Parameter zu einem anderen (nichtlokalen) Klasse, aber das ist ein anderes Merkmal). Daher wird erwartet, dass g ++ dies in naher Zukunft nicht unterstützt, außer vielleicht als Compiler-Erweiterung. Ich denke, es ist eine Schande, weil es ein nützliches Feature gewesen wäre, aber hey, es gibt immer C++ 24 ... – HighCommander4
C++ 14 erlaubt generische lambdas lokal mit variadischen Argumenten definiert zu werden. Diese sind sehr nah an Templates und können daher eine geeignete Problemumgehung sein. –