【发布时间】:2012-06-15 08:51:57
【问题描述】:
我开始使用 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 运行时),它有一个简单的函数实现来解决这个问题? p>
【问题讨论】:
-
听起来像是XY problem 的一个实例。
-
您不能将捕获的 lambda 转换为函数指针。解释你想要做什么。
-
您已经(糟糕地)解释了一个尝试的解决方案,但没有描述您的实际问题是什么。请告诉我们您的实际问题是什么
-
@Antonio:在查看了
std::function的实现后,我对我的答案进行了一些更正。你应该看看。 -
这能回答你的问题吗? Passing capturing lambda as function pointer