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
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.
- 1. Deklarieren einer Klassenvorlage, die von einer anderen Klassenvorlage in C++
- 2. Klasse ist keine Klassenvorlage
- 3. "Klassenvorlage" versus "Template-Klasse"
- 4. static_assert hängen von Klassenvorlage
- 5. Argumentliste für Klassenvorlage fehlt
- 6. Kein Abzug in einer Klassenvorlage
- 7. Intellij: Ändern JUnit Test Klassenvorlage
- 8. Mit Klassenvorlage und Überladung/Operatoren
- 9. statische Member-Funktion innerhalb der Klassenvorlage Spezialisierung
- 10. Überladen cin befreundet mit einer Klassenvorlage
- 11. Zugriff auf geerbte Objekte aus der Klassenvorlage
- 12. eine Templat-Funktors in einer Klassenvorlage aufrufen
- 13. Verwendung von Klassenvorlage in Visual C++
- 14. Warum ist std :: less eine Klassenvorlage?
- 15. Freund mit eigener Klassenvorlage mit anderem Vorlagenparameter
- 16. Verwendung von Klassenvorlage erfordert Listenvorlage Argument
- 17. Template-Klasse innerhalb der Klassenvorlage in C++
- 18. Initialisierung Reihenfolge der statischen Daten innerhalb Klassenvorlage
- 19. Go: lokale Import in nicht-lokale Paket
- 20. Wie lokale lokale Variable in C++ initialisieren?
- 21. SaaS lokale Datenspeicherung (und lokale Laufzeit)
- 22. C++ Variable, die jede Spezialisierung der Klassenvorlage hält
- 23. Erstellen einer Schnittstelle für eine abstrakte Klassenvorlage in C++
- 24. Zugriff auf die Basisklasse typedef in der abgeleiteten Klassenvorlage
- 25. Out-of-class Definition der Funktion der spezialisierten inneren Klassenvorlage?
- 26. So verwenden Sie eine andere Klasse als Klassenvorlage Spezialisierung
- 27. Sind Mitglieder einer Klassenvorlage instanziiert, wenn die Klasse instanziiert wird?
- 28. initialzing und den Zugriff auf Mitglieder einer variadische Klassenvorlage
- 29. Keine "Neudefinition des Standardparameterfehlers" für die Memberfunktion der Klassenvorlage?
- 30. Ist es möglich, eine Klassenvorlage in C++ umzubenennen?
Im Gegensatz sehe ich keinen Grund, eine lokale Template-Klasse zu verbieten. Ich habe keine Ahnung, warum dies in der Standard C++ – valdo
@ 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. –
@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