【发布时间】:2013-07-15 20:53:28
【问题描述】:
我想做这样的事情:
int main()
{
auto f = [/*some variables*/](/*take lambda function*/)
{/*something with lambda function*/};
f([/*other variables*/](/*variables to be decided by f()*/)
{/*something with variables*/});
}
我知道可以将 lambda 传递给函数,也可以传递给 lambda。 以下作品:
int main()
{
int x=0;
int y=0;
auto f = [x,y](double (func)(int)) -> double
{func(0); return 0.0;};
f([](int i) -> double
{return 0.0;});
}
但以下不起作用(只要我更改范围变量以添加 [x])
int main()
{
int x=0;
int y=0;
auto f = [x,y](double (func)(int)) -> double
{func(0); return 0.0;}
f([x](int i) -> double //[x] does not work
{return 0.0;});
}
给出错误:
error: function "lambda [](double (*)(int))->double::operator()" cannot be called with the given argument list
argument types are: (lambda [](int)->double)
object type is: lambda [](double (*)(int))->double
有没有人知道如何解决这个问题或解决它的方法? 我正在使用英特尔编译器 icpc (ICC) 13.1.2 与 std=c++11
谢谢
【问题讨论】:
-
捕获的 lambda 不能转换为函数指针
-
为什么不是
constexpr?auto无论如何都是编译时特性... -
@AndyProwl 什么? 10 分钟内没有您的详细答复?来吧,你让我们在这里工作太辛苦了,你甚至没有一天的代表;-)
-
您的代码中没有语法错误吗?在
f([x](int i) -> double行中,括号没有闭合。 -
@TemplateRex:这些天我有点忙于回答自己的问题:-D