Visual Studio 2010의 가장 큰 특징중의 하나는 바로 C+0 Lamda 표현식을 사용할 수 있는 거다.
이 Lamda 표현식은 다른 언어 특히 루비나 파이썬과 같은 프로그래밍 언어에서 많이 사용하는 문법이었는데 지금까지 C++에서는 이 편리한 Lamda 표현식을 지원하지 않다가 이제서야 지원하게 되었다.
Lamda 표현식에 대해서는 인터넷에 자료가 널려 있기 때문에 더이상 설명하지 않는다. 구글링을 하기 바란다.
Lamda 표현식을 내가 만든 프로그램에서 사용하기 위해서는 다음과 같은 과정을 따르면 된다.
1. #include <functional>
2. typedef 을 이용해서 람다 함수 원형을 정의 한다.
3. 함수의 인자로 람다 Functor 를 입력받고 이를 활용하면 된다.
여기서 설명하는 C+0 Lamda 표현식은 MS 개발툴의 경우 VS2010 이상에서만 가능하다.
#include <functional> template<class _Fn1> inline BOOL CALLBACK EnumControlsProcLamda(HWND hWnd, _Fn1 * func) { (*func)(hWnd); return true; } template<class _Fn1> inline void EnumAllControls(CWnd * pWnd, _Fn1 _Func) { EnumChildWindows(pWnd->GetSafeHwnd(), (WNDENUMPROC)EnumControlsProcLamda<_Fn1>, (LPARAM)&_Func); }
. . . // 모든 자식 컨트롤 true로 만들기 // 람다 함수 내에서 지역변수 Capture가 필요하면 [=]혹은 [&]을 이용한다. EnumAllControls( [](HWND h){ if( h ) { if( !IsWindowEnabled(h) ) { EnableWindow(h); } } });
====================== 함수 실행 시간 구하는 Lamda함수 ======================
template <class Function> __int64 time_call(Function&& f) { __int64 begin = GetTickCount(); f(); return GetTickCount() - begin; }
'I ♥ Programming' 카테고리의 다른 글
[본문스크랩] Visual Studio 2008 Professional Trial 버전 날짜제한 우회방법 (0) | 2014.05.13 |
---|---|
델파이에서 Windows7용 소리 조절(XP 동시지원) 클래스(볼륨 믹서) (0) | 2014.05.03 |
내포 클래스에 RUNTIME_CLASS 적용하기 (0) | 2014.04.29 |
로딩하는 움직이는 GIF 모음 (loading animated gif) (0) | 2014.04.04 |
C++ 모니터 꺼짐(화면보호기) 방지 기능 추가하기 (0) | 2014.04.02 |