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