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)
'Programming > C++' 카테고리의 다른 글
멀티쓰레드 연습(win32 api(CreateThread)) (0) | 2016.03.07 |
---|---|
(링크) 멀티쓰레드 공부 (0) | 2016.03.07 |
비주얼 스튜디오에서 내 문서 경로 바꾸기(Backup Files, StartPages, ArchitectureExplorer 폴더들) (1) | 2016.03.07 |
(링크)가변 인수 (0) | 2016.03.07 |
(링크)C++ 11/14 에 생긴 난수 생성(랜덤) (0) | 2016.03.07 |