C++:Boost 使用方法(函數對象)

參考資料:http://zh.highscore.de/cpp/boost/

函數對象

亦可稱之爲高階函數,☞可被傳入其他函數或從其他函數返回的一類函數。

Boost.Bind

位置:

boost/bind.hpp

Boost.Bind 簡化了不同函數之間的綁定,它只包含一個 boost::bind() 模板函數。

說明:

boost::bind 中包含了佔位符,形如_1、_2和_3,通過佔位符,boost::bind可變爲一元、二元和三元函數。

例子:

#include <boost/bind.hpp> 
#include <iostream> 
#include <vector> 
#include <algorithm> 

void add(int i, int j) 
{ 
  std::cout << i + j << std::endl; 
} 

int main() 
{ 
  std::vector<int> v; 
  v.push_back(1); 
  v.push_back(3); 
  v.push_back(2); 

  std::for_each(v.begin(), v.end(), boost::bind(add, 10, _1)); 
}

Boost.Ref

位置:

boost/ref.hpp

Boost.Ref 包含兩個函數 boost::ref() 和 boost::cref()。

說明:

當 boost::bind() 需要引用參數時,可使用 boost::ref(),需要引用傳遞常量對象時,可使用 boost::cref()。

例子:

#include <boost/bind.hpp> 
#include <iostream> 
#include <vector> 
#include <algorithm> 

void add(int i, int j, std::ostream &os) 
{ 
  os << i + j << std::endl; 
} 

int main() 
{ 
  std::vector<int> v; 
  v.push_back(1); 
  v.push_back(3); 
  v.push_back(2); 

  std::for_each(v.begin(), v.end(), boost::bind(add, 10, _1, boost::ref(std::cout))); 
} 

Boost.Function

位置:

boost/function.hpp

Boost.Function 提供 boost::function 的類用於封裝函數指針。

說明:

boost::function 可以定義一個指針,指向具有特定簽名的函數,如指向類型爲 type1 的參數並返回類型爲 type2 的函數。該指針可指向匹配簽名的函數,其中,數據類型不需要精確匹配。

例子:

#include <boost/function.hpp> 
#include <iostream> 

struct world 
{ 
  void hello(std::ostream &os) 
  { 
    os << "Hello, world!" << std::endl; 
  } 
}; 

int main() 
{ 
  boost::function<void (world*, std::ostream&)> f = &world::hello; 
  world w; 
  f(&w, boost::ref(std::cout)); 
} 

Boost.Lambda

位置:

boost/lambda/lambda.hpp

與 Boost.Bind 相類似,Boost.Lambda 也定義了三個佔位符分別爲 _1, _2 和 _3

例子:

#include <boost/lambda/lambda.hpp> 
#include <iostream> 
#include <vector> 
#include <algorithm> 

int main() 
{ 
  std::vector<int> v; 
  v.push_back(1); 
  v.push_back(3); 
  v.push_back(2); 

  std::for_each(v.begin(), v.end(), std::cout << boost::lambda::_1 << "\n"); 
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章