Funktioniert der C++11 haben keine Unterstützung für die lokalen Funktionen?

Nun, es sind Lambda-Ausdrücke in C++, es scheint wirklich so dumm, dass ich kann nicht erklären, eine lokale Funktion...

z.B.:

Kann ich deklarieren Sie einen Typ in einer Funktion Körper, auch initialisieren Sie es als eine Tabelle der Werte. Aber ich kann nicht eine Hilfsfunktion erstellen, die arbeitet mit, dass die Daten geben - weil ich kann nicht erklären, eine Funktion in einer Funktion, und ich kann nicht finden, die Daten geben, die außerhalb der Funktion, da es nur in diesem Rahmen.

Es gibt Zeiten, wenn es ganz einfach zu ziehen, den Datentyp, die Funktion, und definieren Sie meine Daten geben und Helfer-Funktionen (lokale Datei, Umfang) - aber es gibt Zeiten, wenn es nicht wirklich eine plausible Lösung - z.B. beim initialisieren der Tabelle mit inline-Lambda-Ausdrücke, die sich auf einen lokalen Gültigkeitsbereich von Variablen (oder dieses).

Keine Ahnung, ob die Unterstützung für die lokalen Funktionen kommt, ist bereits definiert, oder, warum, die Sie sind schwierig, für die compiler-Autoren umzusetzen und damit nicht ein Teil der standard?

  • Was wäre eine lokale Funktion geben, dass sich nicht einfach so leicht erreicht werden, mit auto + lambda?
  • Lokale Funktionen sind viel schwieriger zu implementieren als die lokalen Variablen, obwohl es möglich ist, den gleichen Weg Lambda-Ausdrücke implementiert sind.
  • Vielleicht nichts in der vollständigen C++11? Obwohl nicht sicher, was adv. Deklaration einer lambda verfügt über einen benannten örtlichen entweder... scheint, wie wenn der compiler verarbeiten kann man es verarbeiten kann, die andere nicht? Und ich finde, die Regeln sollten ähnlich sein - nur dass dieser Sie nicht erfassen kann alles, was mit einer lokalen Funktion, also ja, einfacher...
  • Ich persönlich bin gegen die lokalen Typen. Sie unnötigerweise erschwert das Parsen und nur selten verwenden, und (zumindest in C++03), können Sie nicht als Vorlage verwendet werden Argumente... ich bevorzuge anonyme namespaces.
  • "Obwohl nicht sicher, was adv. Deklaration einer lambda verfügt über eine benannte lokale, entweder..." Naja der Hauptvorteil ist, dass es legal ist/unterstützt in der Erwägung, dass eine benannte lokale Funktion ist nicht. ;-]
  • Sie können verwendet werden als template-Argumente in C++11.
  • Ich vermute, dass das, was jemand nach, wenn Sie wollten "lokale Funktionen" und lambdas wirklich nicht machen würde, ist in der Tat die Fähigkeit zu konvertieren Erfassung von lambda-zu einer normalen Funktion Zeiger. 'Cos IIRC GCC können Sie die Adresse einer verschachtelten Funktion, und nannte es "magisch" stellt den Kontext (siehe chill Antwort zu erwähnen, Trampoline). Aber der C++ - standard ist nicht zu verlangen, dass Implementierungen in der Lage sein, das zu tun.
  • die Fähigkeit zum konvertieren einer Erfassung von lambda-zu einer normalen Funktion Zeiger" Ehrlich gesagt, das klingt beängstigend. ;-/

InformationsquelleAutor Mordachai | 2011-11-09
Schreibe einen Kommentar