Make Unreal REAL.
article thumbnail
Published 2023. 3. 15. 11:12
람다 식에서 [this] 캡처 C++/기타

 

클래스 내의 람다 식에 this 포인터를 캡처로 전달하면 람다 식 내에서 클래스의 멤버 변수와 함수를 사용할 수 있게 된다.

  • 멤버 변수는 레퍼런스 캡처가 된다.
  • private, public에 상관 없이 사용할 수 있다.
  • 멤버 변수가 아닌 변수는 기존 방식대로 같이 넘겨주어야 한다.

 

C++17부터는 *this를 전달할 경우 복사 캡처로 사용할 수 있다.

 

#include <iostream>

using namespace std;

class Test
{
public:
    int m_public = 1;

private:
    int m_private = 10;

public:
    Test() {}

    void f_lambda(int param)
    {
        [this, &param]()
        {
            m_public *= 2;
            m_private *= 2;
            param *= 2;

            f_public();
            f_private();

            cout << "f_lambda - m_public: " << m_public << endl;
            cout << "f_lambda - m_private: " << m_private << endl << endl;

            cout << "f_lambda - param: " << param << endl;
        }();
    }

    void f_public() { cout << "f_public - m_public: " << m_public << endl; }

private:
    void f_private() { cout << "f_private - m_private: " << m_private << endl << endl; }
};

void main()
{
    Test test;

    test.f_lambda(100);
}

 

출력

f_public - m_public: 2
f_private - m_private: 20

f_lambda - m_public: 2
f_lambda - m_private: 20

f_lambda - param: 200

'C++ > 기타' 카테고리의 다른 글

동적 할당 시 0으로 초기화  (1) 2023.03.20
콤마(,) 연산자  (0) 2023.03.20
클래스 전방 선언(Forward declaration)  (0) 2023.03.07
override 키워드  (0) 2023.03.01
__cplusplus  (0) 2023.02.21
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그