>
Programming/C++

C++ 람다함수 간단하게 정리

최근에 보는 책이 있는데 람다함수 정리가 간단하게 잘되어있어서 따로 정리하였음 +ㅁ+

가능하면 최신 컴파일러를 사용하시는 것이 좋을듯?????

람다함수는 C++11부터 지원되었는데 이후 몇몇 부분이 수정되기도 했었기때문에 컴파일러에 따라 안되는 부분이 있을수도 있수도 있고 나중에 몇몇 부분이 바뀔수도 있다...


1. 람다 함수 정의 및 문법

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


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


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

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로 테스트해본 결과 [&]은 잘된다;;

노트북에 설치되어있는 VS2013에서도 해봤는데 잘된다

개발 환경에 따라 안될수도??



4. 람다함수를 포인터로

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

위에 스샷은 졸업작품때 auto를 직접 사용하여 씬 전환을 간단히 표현 한 것이다


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

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

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



(네이버 블로그 - 2016.01.01. 00:56)





  1. tt - 2019.02.21 11:00 M/D Reply

    정리 굉장히 잘해주셨네요! 도움 많이 되었습니다

최근 트랙백

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.

태그

카운터

Today : 45
Yesterday : 58
Total : 126,083