无法通过引用捕获 lambda 中的成员变量
Can't capture a member variable in a lambda by reference
考虑以下代码片段:
#include <map>
#include <string>
#include <set>
#include <algorithm>
#include <cmath>
using TargetsType = std::map<float, std::string>;
using TimesType = std::set<float>;
void foo (const TargetsType& targets,
const TimesType& times)
{
for (const auto& target : targets)
{
// fails to compile
TimesType::const_iterator iter1 = std::find_if(times.begin(),
times.end(),
[&(target.first)](float item)
{
return std::fabs(item - target.first) < 0.1f;
});
// compiles OK
TimesType::const_iterator iter2 = std::find_if(times.begin(),
times.end(),
[&](float item)
{
return std::fabs(item - target.first) < 0.1f;
});
}
}
iter1
的声明编译失败,出现以下错误:
error: expected ',' before '(' token
但是CCD_ 2的声明是可以的
有人能解释为什么第一个声明没有编译吗?
[&(target.first)](float item) {
return std::fabs(item - target.first) < 0.1f;
}
你不能做[&(target.first)]
。即使没有括号,也无法捕获这样的单个成员变量。您需要使用C++14的捕获inits:
[&first = target.first](float item) {
return std::fabs(item - first) < 0.1f;
}
或者,在第二个lambda之后,只捕获target
:
[&target](float item) {
return std::fabs(item - target.first) < 0.1f;
}
相关文章:
- 如何将lambda作为模板类的成员函数参数
- 使用成员在类中创建 lambda 表达式
- C++ 模板类型的静态 lambda 成员的构造
- Visual C++: MSVC vs. GCC+CLANG: 处理 lambda 捕获类成员变量,正确的方法是什么?
- 模拟成员函数调用 lambda
- C++将 lambda 函数另存为成员变量,而不使用函数指针进行优化
- C++ lambda - 捕获静态成员变量
- 从成员函数签名中自动推导lambda参数
- 在析构函数之后,围绕成员函数的C++lambda包装器是如何工作的
- 无法通过引用捕获 lambda 中的成员变量
- 是否允许在作为静态数据结构成员的lambda函数中捕获变量
- 我正在尝试找到一个特定的结构成员,该成员是使用 lambda 函数的结构向量
- 使用 lambda 函数初始化静态数据成员
- 处于默认参数位置的 Lambda 无法访问好友成员。这是编译器错误吗?
- 捕获 lambda 函数C++成员变量
- 将类成员指针传递给 Lambda 捕获列表 c++11
- 在 C++11 中创建并返回包含 lambda 成员变量的类
- 为什么静态 lambda 成员的封闭类型不完整?
- 具有非静态 lambda 成员的类不能使用默认模板参数?
- C++11.Lambda 成员变量捕获,"this" STL 列表中的指针陷阱