c++ - std::pair 在 lambda 表达式中

标签 c++ c++11 lambda

我只想知道如何在 lambda 表达式捕获括号内编写对。 因为以下代码无法编译,所以我遗漏了一些东西......

std::vector<std::pair<std::string, std::string>> container1_;

for( auto iter : container1_ )
{
    auto result = std::find_if( container2_.cbegin(), container2_.cend(),
        [iter.first]( const std::string& str )->bool { return str == iter.first; } );
}

In member function ‘bool MsgChecker::CheckKeys()’:
error: expected ‘,’ before ‘.’ token
error: expected identifier before ‘.’ token

最佳答案

  [iter.first]( const std::string& str )->bool { return str == iter.first; }
// ^^^^^^^^^^

Lambda 捕获用于标识符,不适用于任意表达式或其他任何东西。

只要传入iter即可:

  [iter]( const std::string& str )->bool { return str == iter.first; }

[C++11: 5.1.2/1]:

[..]

 capture:
   identifier
   & identifier
   this

[C++11: 2.11/1]: An identifier is an arbitrarily long sequence of letters and digits. [..]

关于c++ - std::pair 在 lambda 表达式中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19790451/

相关文章:

c++ - 在窗口之间切换后无效的 OpenGL 绘图上下文

c++ - 在编译时使用 C++ 从另一个数组中提取一个数组

c++ - SFINAE 不适用于 constexpr 函数?

c++ - 带有静态变量的静态内联函数

java - docs.oracle.com lambda 表达式示例无法编译

c++ - cmake 多个目标 - 一个仅 header 目标和另一个可执行文件

c++ - 通过 pragma 更改构建输出目录

c++ - 递归获取二叉搜索树的高度

c++ - C++11 lambda 捕获实际捕获了多少?

c++ - 在 C++ 中创建一个特征来检测闭包类型