C++中的boost::function庫簡介
boost::function Boost.Function庫用來提供一個對象化的函數(shù)指針,通過它可以很容易的將一個函數(shù)封裝為仿函數(shù)。
boost::function庫可以支持自由函數(shù),函數(shù)對象,類成員函數(shù)。而且參數(shù)個數(shù)多達10個。boost::function庫利用模板技術(shù)來實現(xiàn)。生成的代碼有很高的運行效率。首先我們還是以一個例子簡單的說明它的用法:
#include <iostream> #include <boost/function.hpp> using namespace std; float add(int x,float y) { return x + y; } int main() { boost::function<float (int x, float y)> f = &add; cout<<"add(3,2) is "<<f(3,2)<<endl; }
在上面的例子中,
定義了一個仿函數(shù),它指向add函數(shù)。這個是一種比較容易理解的方式,也是boost推薦的寫法,但有的編譯器不支持(其實大多數(shù)主流編譯器都支持)這種模板的語法,不支持的編譯器包括:
Microsoft Visual C++ 6.0, 7.0
Borland C++ 5.5.1
Sun WorkShop 6 update 2 C++ 5.3
Metrowerks CodeWarrior 8.1
如果你用了上述編譯器,則應使用boost::function2<float, int, float> f;
的形式。
如果只是封裝普通函數(shù)(功能類似函數(shù)指針),則使用方式和普通函數(shù)指針類似,可以直接通過"="來進行函數(shù)的封裝,通過"()"來實現(xiàn)函數(shù)的調(diào)用。
如果用它來封裝成員函數(shù)(用函數(shù)指針來指向成員函數(shù)用起來可不是一般的惡心),可以通過如下兩種方式:
通過boost::bind庫實現(xiàn)。
通過stl庫std::bind1st和std::mem_fun 函數(shù)組合實現(xiàn)。
下面是一個簡單的示例:
struct X { bool foo(int a){ cout<<a<<endl; return false;} }; int main() { boost::function<bool (int)> f; X x; f = std::bind1st( std::mem_fun(&X::foo), &x); f(5); f = boost::bind(&X::foo, &x, _1); f(5); }
boost::function對象還有一些成員函數(shù),如contains、clear、empty等,也是一些比較有用的函數(shù),功能很簡單,這里就不多介紹了。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于C++對象繼承中的內(nèi)存布局示例詳解
這篇文章主要給大家介紹了關(guān)于C++對象繼承中內(nèi)存布局的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧。2017-08-08C++?反匯編之關(guān)于Switch語句的優(yōu)化措施
這篇文章主要介紹了C++?反匯編之關(guān)于Switch語句的優(yōu)化措施,利用三種優(yōu)化來降低樹高度,誰的效率高就優(yōu)先使用誰,三種優(yōu)化都無法匹配才會使用判定樹,具體內(nèi)容詳情跟隨小編一起看看吧2022-01-01