我开始使用 C++11 lambda 开发应用程序,并且需要将某些类型转换为函数指针。这在 GCC 4.6.0 中完美运行:
void (* test)() = []()
{
puts("Test!");
};
test();
我的问题是当我需要在 lambda 中使用函数或方法局部变量时:
const char * text = "test!";
void (* test)() = [&]()
{
puts(text);
};
test();
G++ 4.6.0 给出了强制转换错误代码:
main.cpp: In function 'void init(int)':
main.cpp:10:2: error: cannot convert 'main(int argc, char ** argv)::<lambda()>' to 'void (*)()' in initialization
如果使用auto,它可以正常工作:
const char * text = "Test!";
auto test = [&]()
{
puts(text);
};
test();
我的问题是:如何使用[&]为 lambda 创建类型?就我而言,我不能使用 STL std::function(因为我的程序不使用 C++ RTTI 和 EXCEPTIONS 运行时),它有一个简单的函数实现来解决这个问题?