반응형
C++11 람다(Lambda) 함수란? template, struct 익명함수 예제 소스
C++11은 함수 내부에 함수 객체를 선언하여 사용 할 수 있습니다. 주로 사용하는 일반적인 방법은 아래와 같습니다. (람다 사용 간단한 예제)
1 2 3 4 5 6 7 8 9 | void func_test () { auto func_obj = [] (int a) { return a + 100; }; func_obj (23); } | cs |
함수나 각종 수식에 인라인을 이용해 실체를 선언할 수 있습니다. 실행 코드와 함께 데이터 영역도 겸비하게 되는 것입니다.
1 2 3 4 5 6 7 8 9 10 11 | void func () { struct LocalFuncT { int operator () (int a) { return a + 100; } }; LocalFuncT func_obj = LocalFuncT (); func_obj (23); } | cs |
그렇지만, 함수 내에서 선언된 class와 그 객체는 template을 이용할 수 없는 등 제한이 있습니다. 그래서 C++ 11에도 람다(Lambda)가 도입되었습니다.
[C++ 강좌 최신 문법 예제, Template struct]
C++ 11에서는 람다 Lamda 함수로 쉽게 선언하고 사용할 수 있도록 지원이 됩니다.
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 31 32 33 34 35 36 | template <typename FT> struct CallbackObject { FT Func; CallbackObject (FT func) : Func (func) { } int operator () (int a) { return Func (a); } }; template <typename T> CallbackObject <T> CreateCallback (FT func) { return CallbackObject <FT> (func); } int s_func (int a) { return a + 200; } struct FuncObject { int operator () (int a) { returtn a + 300; } }; void func_test () { CreateCallback (s_func) (12); / / pointer CreateCallback (FuncObject ()) (12); / / object CreateCallback ([] (int a) {return a + 100;}) (12); / / lambda } | cs |
함수의 객체를 사용하던 부분을 람다 Lambda 함수로 대체합니다.
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 | template <typename TT, typename FT> struct CallbackObject { TT * This; FT Func; CallbackObject (TT * t, FT func) : This (t), Func (func) {} int operator () (int a) { return (This-> * Func) (a); } }; template <typename TT, typename FT> CallbackObject <TT,FT> CreateCallback (TT * t, FT func) { return CallbackObject <TT,FT> (t, func); } struct func_class { void func_test () { auto func_obj2 = [=] (int a) {dump (this); return a + 400;}; func_obj2 (12); func_obj2.operator () (12); typedef decltype (func_obj2) FUNC_T2; CreateCallback (& func_obj2, & FUNC_T2 :: operator ()) (12); } }; | cs |
C++11 람다(Lambda) 함수란? template, struct 익명함수 예제 소스
반응형