2017-04-21 3 views
0

Verweis auf meine vorherige question, wie die Erklärung im Detail erforderlich ist. Wie funktioniert das folgende Code-Snippet, das gleichwertig und C++ 03 ist?C++ 03 entspricht C++ 11 Lambda

auto get_option_name = [](const std::pair<const std::string, std::string>& p) -> const std::string& { 
    return p.first; 
}; 
+0

es ist ein Funktor, dh ein Objekt, das wie eine Funktion funktioniert. siehe [hier] (http://stackoverflow.com/questions/7627098/what-is-a-lambda-expression-in-c11) – sp2danny

Antwort

3

Es ist äquivalent zu:

class Extractor { 
    // Definition of "function call" operator, to use instance 
    // of this class like a function 
    const std::string& operator()(const std::pair<const std::string, std::string>& p) { 
     return p.first; 
    } 
}; 

Extractor get_option_name; 

Mehr Informationen über wikipedia oder auf stackoverflow

2

@ Garf365 Antwort ist die beste. Ein Lambda und eine Klasse wie diese sind einander am ähnlichsten - Sie können sie genau wie aufrufbare Funktionen verwenden und Zeiger und Verweise darauf weitergeben.

Sie können jedoch auch die Verwendung von Funktionsvorlagen lernen, um diese Arbeit während der Kompilierzeit auszuführen, insbesondere wenn sie als Parameter an eine andere Vorlage übergeben werden, wie bei der Verwendung der Boost-Bibliothek.

Ich war neugierig, ob es eine Verbesserung in der Komplexität des Codes gab, den der Compiler mit einer Funktionsvorlage erzeugte, und es gab!

Schauen Sie selbst:

Vielen Dank für die Frage und führen mich dazu, es zu untersuchen!