Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

게임 개발 메모장

[ C ++ ] Lambda 정리 본문

언리얼 엔진/C++

[ C ++ ] Lambda 정리

Dev_Moses 2023. 12. 4. 01:13

1. 람다 함수 정의 및 문법

 

출력 결과

7

7

 

람다함수의 기본적인 구조는 아래와 같음

 

[변수 캡쳐](받을 인자)->리턴타입{함수}(넘길 인자) 

 

[변수캡쳐]는 현재 함수에서 사용할 외부 변수들을 뜻함

 

main함수에 int num;이라는 변수가 있다면 그 변수를 사용하기 위해서는

변수 캡쳐를 사용하여야 한다

 

변수 캡쳐에 =를 넣으면 해당 함수의 모든 변수를 전부다 사용한다는 의미

&을 넣으면 모든 변수를 참조형으로 받아들인다는 의미이다

 

[=, &num]처럼 특정 변수만 참조형으로 사용하는 것도 가능

비워두면 아무것도 사용하지 않는다는 뜻

 

참고로 전역변수는 캡쳐를 해줄 필요가 없다

 

(받는 인자) ​부분은 말 그대로 함수에서 받는 인자들이다

일반적으로 int add(int a, int b); 선언할때 괄호 안에 있는

a,b 변수처럼 인자로 값을 받을 타입들을 지정해주는 것이다

 

->리턴 타입 ​이것도 말 그대로 리털해주는 타입을 지정해주는 것

void일경우 화살표와 함께 생략할 수 있다

 

{함수} 함수 몸체영역이다

int add(int a, int b)

{

     return a + b;

}

 

같은 함수가 있으면 {}안의 영역과 똑같음

 

(넘길 인자) 호출하는 함수에서 넘겨주는 값들이다

add(10, 20);으로 함수를 호출할때 10, 20을 넣어주는 것처럼 넣어주면 된다


2. 람다 함수 중복

 


3. 클래스의 맴버함수에 있는 람다함수

 

 

클래스 맴버함수에 람다함수가 들어있을 경우 따로 변수 캡쳐를 [=]으로 지정해서

사용하면 this포인터를 이용해 변수 영역에 접근하는 방식이다.

 

이 방식은 참조방식이기 때문에 따라서 [&]이나 [&this]를 넣을경우 에러가 뜬다라고

책에는 써져있는데 VS2015로 테스트해본 결과 [&]은 잘된다;;


4. 람다함수를 포인터로

 

 

함수포인터로 다루는 방법은 두 가지가 있다 auto를 사용하거나 std::function을 사용하는 것이다


 

이런식으로 std::function을 사용하여 함수포인터로 활용할 수도 있다

functional 헤더를 선언 해준다음 std::function<반환형(파라미터 타입)> 방식으로 선언해주면 된다

 

**** 함수포인터를 선언할때는 {}뒤에 있는 인자값을 받는 ()을 생략해도 된다 ****