[c++] 값으로 C ++ 0x 람다 캡처 항상 const?

값으로 캡처하고 캡처 된 값을 상수가 아닌 값으로 만드는 방법이 있습니까? 상수가 아니지만 그래야하는 메서드를 캡처 및 호출하고 싶은 라이브러리 펑터가 있습니다.

다음은 컴파일되지 않지만 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;
}



답변

mutable을 사용하십시오.


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

mutable이 없으면 람다 개체 const의 연산자 ()를 선언합니다.


답변

mutable 을 사용하는 다른 방법이 있습니다 (Crazy Eddie가 제안한 솔루션).

[=]를 사용하면 블록이 모든 객체를 값으로 캡처합니다. [&] 를 사용하여 모든 개체를 참조로 캡처 할 수 있습니다 .

auto bar = [&] () -> bool

또는 참조로 특정 객체 [=, & afoo] 만 캡처 할 수 있습니다 .

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

자세한 내용은이 페이지를 참조하십시오 ( 설명 섹션) :
http://en.cppreference.com/w/cpp/language/lambda


답변