我有一个类具有指向内核函数的函数指针,可以从外部改变.
- 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没有任何错误.