Estoy comenzando a desarrollar aplicaciones usando C++ 11 lambdas, y necesito convertir algunos tipos a punteros a función. Esto funciona perfectamente en GCC 4.6.0:C++ 11 lambdas para el puntero de función
void (* test)() = []()
{
puts("Test!");
};
test();
Mi problema es cuando tengo que utilizar los métodos o funciones variables locales dentro de la lambda:
const char * text = "test!";
void (* test)() = [&]()
{
puts(text);
};
test();
G ++ 4.6.0 da el código de error reparto:
main.cpp: In function 'void init(int)':
main.cpp:10:2: error: cannot convert 'main(int argc, char ** argv)::<lambda()>' to 'void (*)()' in initialization
Si el uso de automóviles , funciona bien:
const char * text = "Test!";
auto test = [&]()
{
puts(text);
};
test();
Mi pregunta es: ¿cómo puedo crear un tipo de lambda con [&]? En mi caso, no puedo usar la STL std :: function (porque mi programa no utiliza el tiempo de ejecución de C++ RTTI y EXCEPTIONS), y ¿tiene una implementación de función simple para resolver este problema?
Suena como una instancia del [problema XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). –
No puede convertir una lambda de captura en un puntero de función. Explica lo que estás tratando de hacer. –
Ha explicado (mal) un intento de solución, sin describir cuál es su problema real. Díganos cuál es su problema real – thecoshman