以下代码失败并出现此错误
E0413 不存在从“lambda []float (int i)->float”到“float (*)(int i)”的合适转换函数
int test;
float (*f)(int i) = [&](int i) -> float {return test; };
我该如何解决?我需要捕获条款。
您只能使用无捕获的 lambda 执行上述操作。
See [expr.prim.lambda.closure] http://eel.is/c++draft/expr.prim.lambda.closure#def:closure_type (sec 7)
非泛型 lambda 表达式的闭包类型不
lambda 捕获其约束(如果有)很满意有一个
将函数转换为函数指针与C++语言联动
具有与闭包类型相同的参数和返回类型
函数调用运算符。
Since lambda 不仅仅是普通函数 https://en.cppreference.com/w/cpp/language/lambda并捕获它需要保留国家,
您找不到任何简单或常规的解决方案来使它们分配给函数指针。
要修复,您可以使用std::function https://en.cppreference.com/w/cpp/utility/functional/function这将通过类型擦除来完成:
#include <functional> // std::function
int test;
std::function<float(int)> f = [&](int i) -> float {return static_cast<float>(test); };
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)