C++中的boost::function庫(kù)簡(jiǎn)介
boost::function Boost.Function庫(kù)用來(lái)提供一個(gè)對(duì)象化的函數(shù)指針,通過(guò)它可以很容易的將一個(gè)函數(shù)封裝為仿函數(shù)。
boost::function庫(kù)可以支持自由函數(shù),函數(shù)對(duì)象,類成員函數(shù)。而且參數(shù)個(gè)數(shù)多達(dá)10個(gè)。boost::function庫(kù)利用模板技術(shù)來(lái)實(shí)現(xiàn)。生成的代碼有很高的運(yùn)行效率。首先我們還是以一個(gè)例子簡(jiǎn)單的說(shuō)明它的用法:
#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;
}在上面的例子中,
定義了一個(gè)仿函數(shù),它指向add函數(shù)。這個(gè)是一種比較容易理解的方式,也是boost推薦的寫法,但有的編譯器不支持(其實(shí)大多數(shù)主流編譯器都支持)這種模板的語(yǔ)法,不支持的編譯器包括:
Microsoft Visual C++ 6.0, 7.0
Borland C++ 5.5.1
Sun WorkShop 6 update 2 C++ 5.3
Metrowerks CodeWarrior 8.1
如果你用了上述編譯器,則應(yīng)使用boost::function2<float, int, float> f;的形式。
如果只是封裝普通函數(shù)(功能類似函數(shù)指針),則使用方式和普通函數(shù)指針類似,可以直接通過(guò)"="來(lái)進(jìn)行函數(shù)的封裝,通過(guò)"()"來(lái)實(shí)現(xiàn)函數(shù)的調(diào)用。
如果用它來(lái)封裝成員函數(shù)(用函數(shù)指針來(lái)指向成員函數(shù)用起來(lái)可不是一般的惡心),可以通過(guò)如下兩種方式:
通過(guò)boost::bind庫(kù)實(shí)現(xiàn)。
通過(guò)stl庫(kù)std::bind1st和std::mem_fun 函數(shù)組合實(shí)現(xiàn)。
下面是一個(gè)簡(jiǎ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對(duì)象還有一些成員函數(shù),如contains、clear、empty等,也是一些比較有用的函數(shù),功能很簡(jiǎn)單,這里就不多介紹了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言去除相鄰重復(fù)字符函數(shù)的實(shí)現(xiàn)方法
這篇文章主要介紹了C語(yǔ)言去除相鄰重復(fù)字符函數(shù)的實(shí)現(xiàn)方法的相關(guān)資料,實(shí)現(xiàn)去重字符串相鄰重復(fù)的字符,不相鄰的不用去重的功能,需要的朋友可以參考下2017-08-08
C語(yǔ)言實(shí)現(xiàn)三子棋(井字棋)算法
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)三子棋(井字棋)算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
opencv3機(jī)器學(xué)習(xí)之EM算法示例詳解
這篇文章主要介紹了opencv3機(jī)器學(xué)習(xí)之EM算法的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
C語(yǔ)言字符/字符串相關(guān)函數(shù)收藏大全
這篇文章主要給大家介紹了關(guān)于C語(yǔ)言字符/字符串的相關(guān)函數(shù),文中通過(guò)示例代碼總結(jié)的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C語(yǔ)言具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
C++結(jié)合OpenCV實(shí)現(xiàn)RRT算法(路徑規(guī)劃算法)
這篇文章主要介紹了C++結(jié)合OpenCV實(shí)現(xiàn)RRT算法,RRT算法整體框架主要分為rand、near、new三點(diǎn)的建立和near與new之間的安全性檢查,需要的朋友可以參考下2022-05-05
C++ EnterCriticalSection簡(jiǎn)單使用
線程鎖在多線程中可以控制線程的執(zhí)行順序,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
淺談Linux環(huán)境下并發(fā)編程中C語(yǔ)言fork()函數(shù)的使用
fork函數(shù)在Linux中可以創(chuàng)建子進(jìn)程即一個(gè)新的進(jìn)程,這里我們根據(jù)實(shí)例來(lái)淺談Linux環(huán)境下并發(fā)編程中C語(yǔ)言fork()函數(shù)的使用,需要的朋友可以參考下2016-06-06

