【发布时间】:2016-05-27 06:06:15
【问题描述】:
我有一个顶级 lambda 函数,然后在这个 lambda 里面有几个嵌套的 lambda 函数。
将 lambdas 嵌套在其他 lambdas 中是个好主意吗?对性能有影响吗?
例如
auto Multiplier1 = []() -> int
{
auto Multiplier2 = [](int i) -> int
{
auto Multiplier3 = [](int i) -> int
{
return i * 2;
};
std::cout << "Calling another lambda 2\n";
return Multiplier3(i * 100);
};
int i = 10;
std::cout << "Calling another lambda 1\n";
int ret = Multiplier2(i);
return ret;
};
int ret = Multiplier1();
std::cout << ret << "\n";
在上面的示例中,我可以将 Multiplier2 和 Multiplier3 重新分解为单独的函数。与此相比,这是更好的方法吗?
我正在修改一个已经投入生产的代码,因此,我处于两难境地,是将其重新分解为单独的函数还是使用 lambda 函数进行管理。
【问题讨论】:
-
"对性能有影响吗?" 对于无捕获的 lambdas,就像你一样,绝对不会。
-
诚实的问题:为什么不围绕你拥有的罐头示例进行循环并计时。然后重构和时间?正如@ildjarn 指出的那样,您需要确保这些 lambda 的签名与您在生产中拥有的真实 lambda 完全等效。
-
@Hal 你是对的。最好的办法是计时并检查性能。
标签: c++ c++11 asynchronous lambda c++14