2010-09-19 12 views
9

Wir können eine lokale Klasse innerhalb einer Funktion definieren, aber diese Klasse kann keine Schablone sein, die etwas nervig und inkonsistent ist. Gibt es dazu ein Update in C++ 0x Standard?Lokale Klassenvorlage

Antwort

7

Ja. Diese Regeländerung macht Lambda-Ausdrücke möglich, da ein Lambda-Ausdruck einen lokalen unbenannten Typ erzeugt.

Entschuldigung, ich habe Ihre Frage falsch gelesen. Ich dachte, du sprichst davon, eine lokale Klasse als Template-Parameter zu verwenden. Dies war in C++ 98 und C++ 03 nicht erlaubt, wird aber in C++ 0x funktionieren.

Wie für Ihre eigentliche Frage wird C++ 0x nichts davon ändern.

Ich sehe ehrlich gesagt keinen Grund, "function-local class templates" zu erlauben. Die Unterstützung für "function-local class templates" ist eine Funktion, die wahrscheinlich nur eine Handvoll Leute interessiert. Und das Schreiben von Klassenvorlagen außerhalb von Funktionen ist ein akzeptabler Ersatz dafür. Dies stellt die Compileranbieter offensichtlich nicht unter Druck, egal wie kompliziert es ist, ein solches Feature zu implementieren. Compiler-Anbieter sind wahrscheinlich eher daran interessiert, andere C++ 0x-Funktionen zu implementieren.

Aber ich verstehe Ihren Standpunkt. Es kann als unnötige Unregelmäßigkeit der Sprache erscheinen. Wenn Ihnen diese Funktion wichtig ist, könnten Sie einen formellen Vorschlag verfassen und ihn in etwa zwei Jahren an den C++ - Standardisierungsausschuss senden, wenn er Vorschläge für "C++ 1y" annehmen wird.

+13

Im Gegensatz sehe ich keinen Grund, eine lokale Template-Klasse zu verbieten. Ich habe keine Ahnung, warum dies in der Standard C++ – valdo

+0

@ Valdo deaktiviert ist: Haben Sie jemals einen Compiler geschrieben? oder den Code eines Compilers durchsuchen? Aus Sicht der Benutzerfreundlichkeit könnte es nett sein, aber vom Gesichtspunkt eines Compiler-Schreibers fügt es eine ungeheure Menge an Komplexität für eine Nischenfunktionalität hinzu: es ist es nicht wert. –

+0

@Matthieu M: Es wäre wahrscheinlich nicht schwer, wenn Sie es von Grund auf neu erstellen, aber das ist im Grunde ein Vermächtnis Problem. Der Funktionsumfang stammt von C, und der Code ist wahrscheinlich unabhängig von dem von Namespaces. Aber wenn Sie Funktionen als eine Art Namespace implementiert hätten, würden solche Features kostenlos zur Verfügung stehen. – MSalters

Verwandte Themen