Zaczynam tworzyć aplikacje wykorzystujące lambdy C++ 11 i muszę przekonwertować niektóre typy na wskaźniki funkcji. Działa to doskonale w GCC 4.6.0:C++ 11 lambdas do wskaźnika funkcji
void (* test)() = []()
{
puts("Test!");
};
test();
mój problem jest, gdy trzeba użyć funkcji lub metody zmiennych lokalnych wewnątrz lambda:
const char * text = "test!";
void (* test)() = [&]()
{
puts(text);
};
test();
g ++ 4.6.0 daje kod błędu obsada:
main.cpp: In function 'void init(int)':
main.cpp:10:2: error: cannot convert 'main(int argc, char ** argv)::<lambda()>' to 'void (*)()' in initialization
Jeśli użycie auto, to działa ok:
const char * text = "Test!";
auto test = [&]()
{
puts(text);
};
test();
Moje pytanie brzmi: jak utworzyć typ dla lambda z [&]? W moim przypadku nie mogę użyć STL std :: function (ponieważ mój program nie używa C++ RTTI i EXCEPTIONS runtime) i ma prostą implementację funkcji, aby rozwiązać ten problem?
Brzmi jak instancja [problemu XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). –
Nie można przekonwertować przechwytywanej wartości lambda na wskaźnik funkcji. Wyjaśnij, co próbujesz zrobić. –
Wyjaśniłeś (źle) próbę rozwiązania, nie opisując jednak faktycznego problemu. Powiedz nam, jaki masz prawdziwy problem: – thecoshman