C++11 lambdas de Pointeur de Fonction

Je commence à développer des applications à l'aide de C++11 lambdas, et la nécessité de convertir certains types de pointeurs de fonction. Cela fonctionne parfaitement dans GCC 4.6.0:

void (* test)() = []()
{
    puts("Test!");
};

test();

Mon problème est quand j'ai besoin d'utiliser la fonction ou de la méthode des variables locales au sein de la lambda:

const char * text = "test!";

void (* test)() = [&]()
{
    puts(text);
};

test();

G++ 4.6.0 donne la fonte de code d'erreur:

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 l'utilisation auto, cela fonctionne bien:

const char * text = "Test!";

auto test = [&]()
{
    puts(text);
};

test();

Ma question est: comment puis-je créer un type pour un lambda [&]? Dans mon cas, je ne peux pas utiliser la STL std::function (parce que mon programme n'utilise pas de C++ RTTI et les EXCEPTIONS à l'exécution), et Il est simple de mise en œuvre de la fonction pour résoudre ce problème?

Sonne comme une instance de la XY problème.
Vous ne pouvez pas convertir une capture lambda à un pointeur de fonction. Expliquez ce que vous essayez de faire.
Vous avez expliqué la (mal) une tentative de solution, tout en décrivant ce que vous en réel problème. S'il vous plaît dites-nous ce que vous problème réel est
J'ai fait quelques corrections à ma réponse après avoir regardé une mise en œuvre de std::function. Vous devriez probablement prendre un coup d'oeil.

OriginalL'auteur Raphael Basso | 2012-06-12