【发布时间】:2015-10-15 04:17:04
【问题描述】:
我正在尝试使用 lambda 函数来快速进行测试,但我正碰壁。我不知道为什么事情没有按(我觉得)应该的那样工作。
这符合我的预期:
double(*example)(double) = [](double S)->double {return std::max(1-100/S, 0.0) * LogNormal(S, 100, 0.25); };
NewtonCotes(lowerBound, upperBound, example, intervals, order)
但事实并非如此:
double(*example)(double) = [K](double S)->double {return std::max(1 - K / S, 0.0) * LogNormal(S, 100, 0.25); };
给出错误:
错误:不存在从“lambda []double(double S)->double”到“double(*)(double)”的合适转换函数。
我不明白为什么在捕获列表中添加一些东西会改变这里发生的事情。不过,我对 C++ 中的 lambdas 相当陌生,所以可能在某个地方犯了一个愚蠢的错误......
我需要做什么才能让它工作?我见过一些人注意到智能感知中有一个错误,并且这样的事情应该可以工作,尽管这是一个稍微不同的问题(至少我认为它们不完全匹配)。我也在使用 VS2013,而不是提到该错误的 2011。
【问题讨论】:
-
参见Passing lambda as function pointer ... tl;dr lambda 只能在不捕获的情况下转换为函数指针。
-
@ShafikYaghmour 是的,当您有答案时,您并不是在开玩笑地标记重复项...
-
我确实搜索过重复项,但我只是今天才开始看这个,所以当我说它对我来说是新的时,我的意思是它真的很新!
-
@在 SO 上一定程度的重复是不可避免的,你收到了两个赞成票,这表明这是一个好问题,它已经被回答了。