我有一个我希望多次使用的 lambda,但我希望它第二次至少对一个不同的(捕获)变量进行操作。这种方法 - 在调用代码中重定向到不同变量的 lambda 中使用捕获的指针 ref - 一种正常/明智的方法吗?或者我应该使用单独的机制,还是完全不同的方法?
MyStruct ms1;
MyStruct* pActiveMyStruct = &ms1;
auto lambda = [&]( const Foo& foo, u32 index )
{
pActiveMyStruct->sScore = foo.m_Score;
pActiveMyStruct->DoSomethingWith( index );
};
pProcessor->ApplyLambdaOn( lambda );
MyStruct ms2;
pActiveMyStruct = &ms2;
pProcessor->ApplyLambdaOn( lambda );
Run Code Online (Sandbox Code Playgroud)
函数式方法是使用闭包:
MyStruct ms1, ms2;
auto makeLambda = [](MyStruct& ms) {
return [&ms](const Foo& foo, u32 index) {
ms.sScore = foo.m_Score;
ms.DoSomethingWith(index);
};
};
pProcessor->ApplyLambdaOn(makeLambda(ms1));
pProcessor->ApplyLambdaOn(makeLambda(ms2));
Run Code Online (Sandbox Code Playgroud)