Visual Studio 11開發指南(17)C++11更新- Lambda運算式

來源:互聯網
上載者:User

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)->BOOL2.    {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);    

 

趕緊下載VS11體驗吧

http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200098144

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.