创建匿名函数然后立即调用它有什么好处?

问题描述 投票:0回答:1

我在 C++ 中读到了这样的代码:

const auto candidate_path = std::invoke([&]() {
  if (status == ModuleStatus::SUCCESS || status == ModuleStatus::FAILURE) {
    // clear candidate path if the module is finished
    return convertToPath(nullptr, false, planner_data);
  }
  return convertToPath(
    observer.lock()->getPathCandidate(), observer.lock()->isExecutionReady(), planner_data);
});

代码创建一个匿名函数并通过引用捕获所有内容

[&](){}
,然后由
std::invoke()
调用它,我想看看这样做有什么好处吗?

谢谢。

c++ anonymous-methods
1个回答
0
投票

变量

candidate_path
旨在具有
const
限定。立即调用的 lambda 允许使用(多个)语句来初始化变量,而不仅仅是
=
之后的单个表达式,而不会牺牲
const

在这种特定情况下,它也可以在单个表达式中使用三元运算符,但这可能更难以阅读。

之所以使用

std::invoke
来调用 lambda 而不是编写
[&](){ /*...*/ }()
可能是作者的个人偏好。我认为可能的原因是更容易识别 lambda 正在被调用。使用直接语法,人们很容易错过末尾的
()

© www.soinside.com 2019 - 2024. All rights reserved.