我需要将此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
算法和函数零。假设TheType
是m_outputs.begin()
返回的类型,您可以轻松地重写代码:
for (
TheType it = m_outputs.begin(), itEnd = m_outputs.end();
it != itEnd;
++it
) {
process(*it);
}