【问题标题】:I need to rewrite c++ 11 code in c++98, c++ 11 is using lambda function [&](const Output & o我需要在 c++98 中重写 c++11 代码,c++11 正在使用 lambda 函数 [&](const Output & o
【发布时间】:2018-03-01 08:09:58
【问题描述】:

我需要将此 c++98 代码 sn-p 迁移到 C++11 到 lambda 函数

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

【问题讨论】:

  • process 是什么?另外,您是否尝试过自己解决这个问题?
  • 如果您可以摆脱 lambda 捕获,您可以只使用常规函数,否则使用 structoperator()
  • 为什么要使用20岁的C++?
  • 进程是对o的一堆调用。我确实知道运算符,但找不到合适的语法来编写捕获
  • 如果问题的重点是捕获,那么为什么要从 lambda 主体中删除所有捕获的变量??

标签: c++ c++98


【解决方案1】:

无论如何,似乎对 lambda 的使用毫无意义:

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

也就是说,lambda 只是一个带有operator() 的对象。您始终可以手动编写底层类型,并创建一个实例。 Lambda 的保存代码行,但并不神奇。

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

【讨论】:

    【解决方案2】:

    请注意,在这里实际使用std 算法和仿函数的需求为零。假设TheTypem_outputs.begin()返回的类型,你可以很容易地重写代码如下:

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

    【讨论】:

      猜你喜欢
      • 2015-01-10
      • 1970-01-01
      • 2015-09-28
      • 1970-01-01
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 2021-08-20
      • 2014-08-16
      相关资源
      最近更新 更多