代码之家  ›  专栏  ›  技术社区  ›  Zac

C++0xλ值的捕获总是常数?

  •  84
  • Zac  · 技术社区  · 16 年前

    有没有任何方法可以按值捕获,并使捕获的值非常量?我有一个库函数,希望捕获和调用一个非常量但应该是的方法。

    以下代码不会编译,但会使foo::operator()const修复它。

    struct foo
    {
      bool operator () ( const bool & a )
      {
        return a;
      }
    };
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
      foo afoo;
    
      auto bar = [=] () -> bool
        {
          afoo(true);
        };
    
      return 0;
    }
    
    2 回复  |  直到 10 年前
        1
  •  127
  •   Edward Strange    16 年前

    使用可变的。

    
    auto bar = [=] () mutable -> bool ....
    

    如果没有可变参数,则声明lambda对象const的运算符()。

        2
  •  -4
  •   Vlad    10 年前

    有其他方法可以使用 易变的 (疯狂埃迪提出的解决方案)。

    [= ] 块按值捕获所有对象。你可以使用 [&;] 要通过引用捕获所有对象,请执行以下操作:

    auto bar = [&] () -> bool
    

    或者,您可以只通过引用捕获某些对象 [=,&;AFOO] :

    auto bar = [=, &afoo] () -> bool
    

    详情请参阅本页。( 解释 部分): http://en.cppreference.com/w/cpp/language/lambda

    推荐文章