我有一个类具有指向内核函数的函数指针,可以从外部改变.
class Bar { public: int i; } class Foo { public: std::function<double()> kernel; Bar bar; }; int main() { Foo f; f.kernel = []() -> double { return i * i; }; //this is not working obvIoUsly }
如何实现“呈现”的行为,例如读取lambda中的类变量.我可以绕过它,通过f里面写f.bar.i,但这不是很好的解决方案.
解决方法
在C 14中你可以写成,
f.kernel = [&i = f.bar.i]() -> double { return i * i; };
如果你没有C 14,你可以创建另一个变量,
int &i = f.bar.i; f.kernel = [&i]() -> double { return i*i; };
虽然传递f和写f.bar.i没有任何错误.