1. boost::any:萬能數據類型函數
#include <boost/any.hpp>this
std::vector<boost::any> vec; template<class mT> void VarEqu(mT& pVar, const boost::any& mAn) { pVar = boost::any_cast<mT>(mAn); }
2.boost::bind:很是龐大的函數家族指針
#include <boost\bind.hpp>code
//綁定普通函數: * 1.bind(f,_1,9)(x); //f(x,9) * 2.bind(f,_1,_2)(x,y); //f(x,y) * 3.bind(f,_2,_1)(x,y); //f(y,x) * 4.bind(f,_1,_1)(x,y); //f(x,x) * 5.bind(g,_1,_8,_2)(x,y); //g(x,8,y) * 6.bind(g,_3,_2,_2)(x,y,z); //g(z,y,y)*/ //綁定函數指針: f_type fp = f; g_type fg = g; int x = 1,y = 2,z = 3; cout << bind(fp,_1,18)(x) << endl; cout << bind(fg,_1,_3,_3)(x,y,z) << endl; //綁定成員函數: * 綁定類的成員函數必須犧牲一個佔位符的位置 * 進而經過對象做爲第一個參數來調用第一個成員函數 * 由於成員函數指針不能直接調用operator(),必須綁定到 * 一個對象或指針,經過this指針來調用 * demo a,&ra = a; //類的實例或引用 demo *p = &a; //指針 //注意:在成員函數以前必須加上取地址操做符,以代表其是成員函數指針,不然編譯沒法經過 cout << bind(&demo::f,a,_1,20)(80) << endl; cout << bind(&demo::f,ra,_2,_1)(20,10) << endl; cout << bind(&demo::f,p,_1,_1)(30,30) << endl; //綁定成員變量: * bind對類的另外一個操做是public成員變量,其能夠有選擇地去操做一些成員變量*/ typedef pair<int,string> pis_t; pis_t pp(12,"xiaoming"); cout << bind(&pis_t::first,pp)(); cout << bind(&pis_t::second,pp)() << endl; //綁定函數對象: * 若函數有內部類型定義result_type,bind能夠進行自動推導; * 不然須要在編寫時增長typedef result_type工做 * */ cout << bind<int>(func(),_1,_2)(10,20) << endl; //與ref的配合: * bind是採用拷貝的方式來存儲對象和參數,開銷較大,爲了減小這種開銷,咱們能夠搭配ref庫 * 一塊兒使用,可是這可能會引發bind的調用延後。若調用時引用的變量或者函數對象被銷燬,那麼 * 結果未知*/ int m = 30; cout << bind(g,_1,cref(m),ref(m))(10) << endl; cout << bind<int>(ref(f),_1,_2)(10,20) << endl;
未完待續對象