比較和對比:C 0x 中的std::bind 和Lambda
在C 0x 中,程式設計師面臨兩種選擇來捕獲函數:std::bind 和lambda。雖然兩者都有不同的用途,但它們在某些應用中存在重疊。讓我們以交叉功能為例,深入研究每種方法的優點和限制。
考慮建立擲骰子函數的任務。使用lambda,我們可以將其表示為:
<code class="cpp">auto dice = [&]() { return distribution(engine); };</code>
或者,使用std::bind,我們可以寫:
<code class="cpp">auto dice = bind(distribution, engine);</code>
單態與多態性
一個根本的差別在於它們的型別行為。 Lambda 是單態的,這表示它們具有在編譯時確定的固定參數類型。與綁定對應項相比,此限制限制了 lambda 的靈活性。
例如,考慮一個列印兩個參數的函數:
<code class="cpp">auto f = [](auto a, auto b) { cout << a << ' ' << b; }
將此 lambda 與不同的參數類型一起使用將導致編譯器錯誤。相反,std::bind 允許多態行為,使函數能夠綁定到不同類型的參數:
<code class="cpp">struct foo { template <typename A, typename B> void operator()(A a, B b) { cout << a << ' ' << b; } }; auto f = bind(foo(), _1, _2);</code>
透過將類型推導推遲到函數被調用,std::bind 提供了更大的靈活性用於處理不同的輸入類型。
以上是何時選擇:std::bind 與 C 0x 中的 Lambda?的詳細內容。更多資訊請關注PHP中文網其他相關文章!