development

람다는 정적 멤버 함수를 호출하기 위해 'this'를 캡처해야합니까?

big-blog 2021. 1. 8. 22:46
반응형

람다는 정적 멤버 함수를 호출하기 위해 'this'를 캡처해야합니까?


다음 코드의 경우 :

struct B
{
    void g()
    {
        []() { B::f(); }();
    }

    static void f();
};

g ++ 4.6은 오류를 제공합니다.

test.cpp : In lambda function :
test.cpp : 44 : 21 : error : 'this'was not captured for this lambda function

(흥미롭게도 g ++ 4.5는 코드를 잘 컴파일합니다).

이것은 g ++ 4.6의 버그입니까, 아니면 정적 멤버 함수를 호출 할 수 있도록 'this'매개 변수를 캡처해야합니까? 왜 그래야하는지 모르겠지만 B::.


동의합니다. 잘 컴파일되어야합니다. 수정을 위해 (아직 모르는 경우) 참조 캡처를 추가하면 gcc 4.6에서 잘 컴파일됩니다.

struct B
{
    void g()
    {
        [&]() { B::f(); }();
    }

    static void f() { std::cout << "Hello World" << std::endl; };
};

참조 URL : https://stackoverflow.com/questions/4940259/lambdas-require-capturing-this-to-call-static-member-function

반응형