2014-03-18 65 views
1

我讀過boost::function函數包裝器,以及教程部分(http://www.boost.org/doc/libs/1_55_0/doc/html/function/tutorial.html)中引用的示例。我想了解函數包裝器的用例,而不是僅僅使用函數指針。我不一定在尋找代碼示例,但更多的情況是函數包裝器比函數指針更適合使用。C++函數包裝器(升壓)

謝謝, 艾哈邁德。

+0

所以你知道,還有'std :: function'。 – OMGtechy

+0

不知道,謝謝你提到它。考慮到需要考慮,如果std :: function足夠了,應該使用它而不是boost :: function嗎? –

+0

我個人使用'std :: function',只是因爲它是標準的C++ 11。你也可以在boost中使用'std :: function',就像'boost :: function'一樣(參見http://stackoverflow.com/questions/22444442/mixing-boost-smart-pointers-and-c11-smart-指針)。 – OMGtechy

回答

2

函數包裝函數包裝任何可調用的實體,這包括函數指針以及函數對象和lambda函數。

函數對象可以是任何重載operator()的類。功能對象也是調用的結果,如boost::bindstd::bind

然後使用函數包裝將允許使用任何類型的可調用對象而不僅僅是函數指針。

函數對象主要用於將值綁定到對象,例如維護內部計數器以確定調用函數對象的次數(只需要函數指針在函數指針的作用域中需要靜態變量) ,或者將一個類實例綁定到一個成員函數中,以便稍後調用。

通過讓類的構造函數或函數取作爲參數,而不是一個函數指針boost::function(或std::function)功能的包裝,你允許你的類或函數的用戶能夠決定他們是否希望通過你函數指針或函數對象或lambda,並且你不必關心他們做了什麼選擇。