클래스 내의 람다 식에 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, ¶m]()
{
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 |