Visual Studio 11开发指南(17)C++11更新- Lambda表达式

Visual Studio 2010 年以来有可能在 c + + 代码中,和更具体地 STL 使用 Lambda 表达式 (匿名方法的窗体)。例如,他们是很好的做法,当我们使用这些类型的算法for_each、 parallel_for、 parallel_for_each等。

1.std::deque<int> d1; 2. d1.push_back (2); 3. d1.push_back (1); 4. d1.push_back(3); 5. d1.push_back(0); 6. auto a=d1.begin (); 7. auto b=d1.end (); 8. std::sort(a,b); 9. 10. std::for_each (a,b,[](int i) 11. { 12. std::cout << i << std::endl; 13. });


Lambda 这里开始用两个字符[]以指示我们捕获语法相对于没有本地变量[] 或 [=]或我们捕获所有的本地变量由引用或副本分别。做不捕获任何变量是 lambda 说是无国籍(也就是要说没有国家)。

现在,这种类型的 lambda 隐式转换为函数指针,换句话说,我们要用我们良好的旧 Win32 API。
此处的示例与CreateThreadpoolWorkAPI,指向函数的指针参数 1,键入PTP_WORK_CALLBACK ,或我们考虑他放置的 lambda 虽然明显好参数。

1.PTP_POOL pool=CreateThreadpool(NULL); 2. TP_CALLBACK_ENVIRON cbEnviron; 3. InitializeThreadpoolEnvironment(&cbEnviron); 4. SetThreadpoolThreadMaximum (pool,4); 5. BOOL bRet=SetThreadpoolThreadMinimum (pool,2); 6. 7. 8. PTP_WORK work=CreateThreadpoolWork([]( PTP_CALLBACK_INSTANCE Instance,PVOID Context,PTP_WORK Work) 9. { 10. 11. wprintf(L"Fait du boulot\n"); 12. },NULL,&cbEnviron); 13. SubmitThreadpoolWork(work); 14. WaitForThreadpoolWorkCallbacks(work,FALSE); 15. CloseThreadpoolWork(work); 16. CloseThreadpool(pool);



另一个示例 API EnumWindows,或我们可以对"现代 c + +"混合使用旧 API 调用

1.BOOL ret=EnumWindows ([](HWND hwnd,LPARAM lParam)->BOOL 2. { 3. const size_t MAX_SIZE=2048; 4. LPWSTR title=static_cast<LPWSTR>(_malloca(MAX_SIZE)); 5. if (title!=nullptr) 6. { 7. ZeroMemory (title,MAX_SIZE); 8. if (GetWindowTextLength (hwnd) >0) 9. { 10. GetWindowTextW (hwnd,title,MAX_SIZE); 11. wprintf(L"%ls\n",title); 12. _freea(title); 13. } 14. } 15. 16. return TRUE; 17. },0);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值