게임 개발 메모장
[ C ++ ] Lambda 정리 본문
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<반환형(파라미터 타입)> 방식으로 선언해주면 된다
**** 함수포인터를 선언할때는 {}뒤에 있는 인자값을 받는 ()을 생략해도 된다 ****
'언리얼 엔진 > C++' 카테고리의 다른 글
[ C++ ] 깊은 복사, 얕은 복사 (0) | 2023.12.09 |
---|---|
[ C++ ] 메모리 할당 (0) | 2023.12.06 |
[ C++ ] 다중 if문으로 조건 쓰기 vs if문 안에 &&, || 로 한번에 조건 쓰기 (0) | 2023.11.29 |
[ C++ ] 전역 변수 vs 정적 변수 (0) | 2023.08.27 |
[ C++ ] 댕글링 포인터(Dangling Pointer)란? (0) | 2023.08.14 |