为什么这个 lambda 表达式不接受任何参数?

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

我试图阅读一些 pytorch 源代码,但遇到了很多麻烦,因为我不太了解现代 C++。我遇到了以下代码:

c10::optional<OperatorHandle> Dispatcher::findSchema(const OperatorName& overload_name) {
  return operatorLookupTable_.read([&] (const ska::flat_hash_map<OperatorName, OperatorHandle>& operatorLookupTable) -> c10::optional<OperatorHandle> {
    auto found = operatorLookupTable.find(overload_name);
    if (found == operatorLookupTable.end()) {
      return c10::nullopt;
    }
    return found->second;
  });
}

read
方法内部是一个lambda函数,其中
[&]
通过引用捕获
overload_name
operatorLookupTable_
。 lambda 函数作为一个整体接受一个参数
operatorLookupTable
并返回
c10::optional<OperatorHandle>
类型变量。让我感到困惑的是,该函数仅被定义,尚未被调用,因此发送到 lambda 函数的
operatorLookupTable
类型中没有显式参数。

我做了相当多的研究,似乎变量

operatorLookupTable_
(其方法
read
创建并调用 lambda 函数)作为 lambda 表达式的参数发送(据说如此),但我就是想不通出为什么?我问 ChatGPT,它说
read
方法被定义为以这种方式工作(使用 operatorLookupTable 作为它创建的 lambda 表达式的参数作为自己的参数)? pytorch 库是如此广泛,版本差异如此之大,以至于我无法导航到他们实际定义此
read
方法的位置。另外,这对我来说没有多大意义,可以在方法中定义它。谁能在这里解释一下 lambda 参数吗?

c++ lambda pytorch arguments
1个回答
0
投票

令我困惑的是,该函数仅被定义,尚未被调用,因此发送到 lambda 函数的operatorLookupTable 类型中没有显式参数。

实际使用/调用时,参数将被传递给 lambda/回调。例如,这是一个人为的示例来演示相同的内容,

void func(auto lambda)
{
     lambda("some arg"); //actually call the lambda/callback here with some arguments
}
int main()
{
    func([](const std::string &s){return 4;});
}
© www.soinside.com 2019 - 2024. All rights reserved.