2012-09-02 39 views
5

我認爲這個答案不是,但我只是想確定。混合std ::'s和boost ::'s :: bind和::函數會導致問題嗎?

如果我有一個std::function作爲函數中的參數,傳遞boost::bind是否有任何問題,反之亦然?

編輯:

我發現,通過升壓::綁定使用的佔位符被直接導入到命名空間,當你包括升壓\ bind.h,以及它們與標準::綁定不兼容。對於std :: bind,你必須顯式地引用佔位符,如下所示:std :: placeholders :: _ 1,或者做一些其他的typedef或使用magic來使它們同時可用。

+0

您可能想知道嵌套的綁定表達式是什麼,並檢查不同的庫如何在這方面進行交互。 –

回答

10

std::(和boost::)的全部目的function是,他們可以接受可與正確的簽名工具包括的lambda,仿函數被調用任何函數對象,和任何種類的結合的結果。他們不關心你的函數對象來自哪裏或者它是什麼類型。

你甚至可以將它們綁定在一起,儘管我不確定你爲什麼要這樣做。

+1

感謝您爲我驗證。我確實發現boost將佔位符導入與std :: bind的佔位符衝突的命名空間,因此您必須使用std :: placeholders :: _ 1明確命名std的佔位符 – cwm9