Visual Studio 2010 年以来有可能在 c + + 代码中,和更具体地 STL 使用 Lambda 表达式 (匿名方法的窗体)。例如,看下面的代码执行,当使用这些类型的算法for_each、 parallel_for、 parallel_for_each等等的时候。
~~~
std::deque<int> d1;
d1.push_back (2);
d1.push_back (1);
d1.push_back(3);
d1.push_back(0);
auto a=d1.begin ();
auto b=d1.end ();
std::sort(a,b);
std::for_each (a,b,[](int i)
{
std::cout << i << std::endl;
});
~~~
Lambda 这里开始用两个字符[]以指示我们捕获语法相对于没有本地变量[] 或 [=]或我们捕获所有的本地变量由引用或备份分别。做不捕获任何变量是 lambda 说是无限定的。
现在,这种类型的 lambda 隐式转换为函数指针,换句话说,成功调用旧的 Win32 API。
此处的示例与CreateThreadpoolWorkAPI,指向函数的指针参数 1,键入PTP_WORK_CALLBACK ,比原来的 lambda明显更好一些。
~~~
PTP_POOL pool=CreateThreadpool(NULL);
TP_CALLBACK_ENVIRON cbEnviron;
InitializeThreadpoolEnvironment(&cbEnviron);
SetThreadpoolThreadMaximum (pool,4);
BOOL bRet=SetThreadpoolThreadMinimum (pool,2);
PTP_WORK work=CreateThreadpoolWork([]( PTP_CALLBACK_INSTANCE Instance,PVOID Context,PTP_WORK Work)
{
wprintf(L"Fait du boulot\n");
},NULL,&cbEnviron);
SubmitThreadpoolWork(work);
WaitForThreadpoolWorkCallbacks(work,FALSE);
CloseThreadpoolWork(work);
CloseThreadpool(pool);
~~~
另一个示例 API EnumWindows,或我们可以对"现代 c + +代码"混合使用旧 API 调用
~~~
BOOL ret=EnumWindows ([](HWND hwnd,LPARAM lParam)->BOOL
{
const size_t MAX_SIZE=2048;
LPWSTR title=static_cast<LPWSTR>(_malloca(MAX_SIZE)); if (title!=nullptr)
{
ZeroMemory (title,MAX_SIZE);
if (GetWindowTextLength (hwnd) >0)
{
GetWindowTextW (hwnd,title,MAX_SIZE);
wprintf(L"%ls\n",title);
_freea(title);
}
}
return TRUE;
},0);
~~~
赶紧下载VS11体验吧
[http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200098144](http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200098144)
- 前言
- Visual Studio 11开发指南(1) Visual Studio 11简介与新特性
- Visual Studio 11开发指南(2) Visual Studio 11放弃宏处理
- Visual Studio 11开发指南(3)Visual Studio 11开发SharePoint 2011程序
- Visual Studio 11开发指南(4)Visual Studio 11编程语言发展
- Visual Studio 11开发指南(5)Visual Studio 11 IDE增强
- Visual Studio 11开发指南(6)Visual Studio 11平台改进
- Visual Studio 11开发指南(7)NET 4.5的改善
- Visual Studio 11开发指南(8)Visual C++ 11新特色
- Visual Studio 11开发指南(9)Visual C++ 新功能体验
- Visual Studio 11开发指南(10)Visual C++11 IDE 新功能体验
- Visual Studio 11开发指南(11)Visual Studio 11调试游戏
- Visual Studio 11开发指南(12)Visual Studio 11可视化多核多线程编程的行为
- Visual Studio 11开发指南(13)C++11语言新特性
- Visual Studio 11开发指南(14)C++11---C++/ CX设计
- Visual Studio 11开发指南(15)C++11单元测试
- Visual Studio 11开发指南(16)C++11更新-多线程和异步操作管理
- Visual Studio 11开发指南(17)C++11更新- Lambda表达式
- Visual Studio 11开发指南(18)C++11更新-自动矢量器使用
- Visual Studio 11开发指南(19)C++11更新-并行模式库和代理库
- 在 C++ 中使用 PPL 进行异步编程
- 基于VisualStudio11开发Windows8的Metro sample讲解(1)MessageBox
- Visual C++ 11 中新的并发功能
- 基于Windows8与Visual Studio2012开发内核隐藏注册表
- 基于VC++2012在Windows8上实现文件隐藏
- 实现诺基亚 lumia Windows phone 的手机通话记录截取
- 最短代码实现windows8下的下载器-下载安装执行一体化
- 用Visual studio2012在Windows8上开发内核驱动监视线程创建
- 用Visual studio2012在Windows8上开发内核驱动监视进程创建
- 基于Windows8与Visual Studio2012实现杀毒通用模块
- 用Visual studio2012在Windows8上开发内核中隐藏进程
- 用Visual studio11在Windows8上开发内核枚举注册表
- 用Visual studio11在Windows8上开发内核驱动隐藏注册表
- 用Visual studio11在Windows8上开发驱动实现注册表监控和过滤
- 用Visual studio11在Windows8上开发驱动实现内存填0杀进程
- 【CSDN2012年度博客之星】喜欢本博客的读者,投票赠送《visual C++2010开发权威指南》电子稿--感谢支持 ~(截至到2012年12月30日)
- 今天在清华图书馆看到我的杰作,感慨万千,而我要归零一切 !
- use Visual studio2012 developing kernel driver monitor thread creation on Windows8
- To kernel driver monitoring process developed in Windows8 create using Visual studio2012
- Under Windows8 kernel mode development NDIS application-NDIS Filter explain
- use Visual studio2012 development kernel to hidden process on Windows8