C 中的Lambda 與Bind:多態性與效率
在類似任務中比較C 0x lambda 和std::bind 的用法時,兩者之間的選擇可能會受到多態性和效率等因素的影響。
Bind 與 Lambda 詳細資訊
考慮以下範例,其中 lambda 和bind用於使用分佈和引擎產生隨機數:
// Using lambda auto dice = [&]() { return distribution(engine); }; // Using bind auto dice = bind(distribution, engine);
多態
與單態(即具有固定類型)的lambda 不同,std: : bind 允許多態行為。這表示 Bind 可用於建立未知類型的函數,如下所示:
struct foo { typedef void result_type; template <typename A, typename B> void operator()(A a, B b) { cout << a << ' ' << b; } }; auto f = bind(foo(), _1, _2); f("test", 1.2f); // will print "test 1.2"
在此範例中,a 和 b 的類型是在呼叫 f 時在執行時推導出來的。 lambda 不具備這種靈活性。
效率
一般來說,當按值使用捕獲的變數時,lambda 往往比綁定更有效率。這是因為 lambda 直接捕獲變量,而 bind 創建一個引用捕獲變量的閉包物件。然而,當捕獲的變數較大或函數被頻繁呼叫時,bind 可能會具有優勢。
結論
lambda 和 bind 之間的選擇取決於具體需求的應用程式。 Lambda 提供多態性,並且可以有效地擷取小型值類型變數。 Bind 提供了更大的靈活性,在處理大型或頻繁調用的函數時可能更可取。
以上是C 中的 Lambda 與 Bind:什麼時候該選擇每個?的詳細內容。更多資訊請關注PHP中文網其他相關文章!