我需要用c ++ 98重写c ++ 11代码,c ++ 11正在使用lambda函数[&](const Output & o



我需要将此C 98代码段迁移到C 11到lambda函数

std::for_each(m_outputs.begin(), m_outputs.end(), [&](const Output & o)
{
     process(o)
}

似乎是对lambda的毫无意义的使用:

std::for_each(m_outputs.begin(), m_outputs.end(), &process);

也就是说,lambda只是一个具有operator()的对象。您随时可以手动编写基础类型,并创建一个实例。Lambda的保存代码行,但不是魔术。

[编辑]由于我们了解到问题是关于捕获的,因此[&]通过引用捕获变量。这意味着将一个或多个参考变量添加到您正在编写的替换类型中。

请注意,在此处实际使用std算法和函数零。假设TheTypem_outputs.begin()返回的类型,您可以轻松地重写代码:

for (
  TheType it = m_outputs.begin(), itEnd = m_outputs.end();
  it != itEnd;
  ++it
) {
  process(*it);
}

最新更新