Ich fange an, Anwendungen zu entwickeln, die C++ 11 Lambdas verwenden, und einige Typen in Funktionszeiger konvertieren müssen. Das funktioniert perfekt in GCC 4.6.0:C++ 11 Lambdas zu Funktionszeiger
void (* test)() = []()
{
puts("Test!");
};
test();
Mein Problem ist, wenn ich brauche, um Funktion oder Methode lokale Variablen innerhalb der Lambda zu verwenden: Code
const char * text = "test!";
void (* test)() = [&]()
{
puts(text);
};
test();
G ++ 4.6.0 gibt dem Gussfehler:
main.cpp: In function 'void init(int)':
main.cpp:10:2: error: cannot convert 'main(int argc, char ** argv)::<lambda()>' to 'void (*)()' in initialization
Wenn Verwendung Auto, es funktioniert ok:
const char * text = "Test!";
auto test = [&]()
{
puts(text);
};
test();
Meine Frage ist: Wie kann ich einen Typ für ein Lambda mit [&] erstellen? In meinem Fall kann ich nicht die STL Std :: Funktion (weil mein Programm nicht C++ RTTI und EXCEPTIONS Laufzeit verwendet), und es hat eine einfache Implementierung von Funktion, um dieses Problem zu lösen?
Klingt wie eine Instanz des [XY-Problems] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). –
Sie können ein erfassendes Lambda nicht in einen Funktionszeiger konvertieren. Erkläre, was du zu tun versuchst. –
Sie haben eine (versuchte) Lösung erklärt, obwohl Sie nicht beschreiben, was Ihr Problem ist. Bitte sagen Sie uns, was Sie eigentlich Problem ist – thecoshman