首頁  >  文章  >  後端開發  >  何時選擇:std::bind 與 C 0x 中的 Lambda?

何時選擇:std::bind 與 C 0x 中的 Lambda?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-30 15:21:12964瀏覽

When to Choose: std::bind vs. Lambdas in C  0x?

比較和對比: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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn