【问题标题】:error using static method in lambda在 lambda 中使用静态方法时出错
【发布时间】:2017-12-16 10:24:32
【问题描述】:

我在 my_class 中有一个 static 方法 my_method_1(),我正在尝试在 lambda 中使用它:

static void my_method_1(el);

void my_class::my_method_2()
{
    std::for_each(my_list_.begin(), my_list_.end(),
        [](auto& element)
        {
            my_method_1(element);
        });
}

gcc6 给我一个错误:

没有为这个 lambda 函数捕获'this'

在 gcc4 中,它可以编译。

【问题讨论】:

标签: c++ lambda static c++14 gcc6


【解决方案1】:

无法复制。

根据错误(“错误:没有为这个 lambda 函数捕获‘this’”)my_method_1() 不是 static

如果my_method_1() 是一个非静态方法,您可以在lambda 中使用它,通过值捕获this(就像通过引用捕获对象一样);像

 //  v <- capture by value 
    [=](auto& element)
     { my_method_1(element); }

如果my_method_1() 真的是static 方法,请准备一个最小但完整的示例来重现您的问题。

【讨论】:

    【解决方案2】:

    2 观察:

    1. 你的函数是静态的,你可以把它称为my_class::my_method_1()

    2. 这里不需要使用 lambda,你试过了吗?

      void my_class::my_method_2()
      {
          for (auto& element : my_list)
              my_method_1(element);
      }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-31
      • 2018-05-14
      • 1970-01-01
      • 2015-05-22
      • 2015-08-07
      • 1970-01-01
      • 1970-01-01
      • 2016-09-11
      相关资源
      最近更新 更多