我需要在 c++98 中重写 c++11 代码,c++11 使用 lambda 函数 [&](const Output & o
I need to rewrite c++ 11 code in c++98, c++ 11 is using lambda function [&](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
算法和仿函数。假设TheType
是m_outputs.begin()
returns的类型,你可以很容易的改写代码如下:
for (
TheType it = m_outputs.begin(), itEnd = m_outputs.end();
it != itEnd;
++it
) {
process(*it);
}
我需要将此 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()
returns的类型,你可以很容易的改写代码如下:
for (
TheType it = m_outputs.begin(), itEnd = m_outputs.end();
it != itEnd;
++it
) {
process(*it);
}