[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