生活随笔
收集整理的這篇文章主要介紹了
boost常用库
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.boost::any
boost::any是一種通用的數據類型,可以將各種類型包裝后統一放入容器內,最重要的它是類型安全的。有點象COM里面的variant。
使用方法:
any::type()?返回包裝的類型
any_cast可用于any到其他類型的轉化
#include?<boost/any.hpp> void?test_any() { ????typedef?std::vector<boost::any>?many; ????many?a; ????a.push_back(2); ????a.push_back(string("test")); ????for(unsigned?int?i=0;i<a.size();++i) ????{ ????????cout<<a[i].type().name()<<endl; ????????try ????????{ ????????????int?result?=?any_cast<int>(a[i]); ????????????cout<<result<<endl; ????????} ????????catch(boost::bad_any_cast?&?ex) ????????{ ????????????cout<<"cast?error:"<<ex.what()<<endl; ????????} ????} }
?
2.boost::array
boost::array僅僅是對數組一層薄薄的封裝,提供跟各種算法配合的iterator,使用方法很簡單。注意:可以使用{}來初始化array,因為array所有的成員變量都是public的。
#include?<boost/array.hpp> void?test_array() { ????array<int,10>?ai?=?{1,2,3}; ????for(size_t?i=0;i<ai.size();++i) ????{ ????????cout<<ai[i]<<endl; ????} }
?
3.boost::lexical_cast
lexical_cast用于將字符串轉換成各種數字類型(int,float,short etc.)。
#include?<boost/lexical_cast.hpp> void?test_lexical_cast() { ????int?i?=?boost::lexical_cast<int>("123"); ????cout?<<?i?<<?endl; }
?
4.boost::format
boost::format是用于替代c里面的sprintf,優點是類型安全,不會因為類型和參數不匹配而導致程序崩潰了,而且還可以重復使用參數。
#include?<boost/format.hpp> void?test_format() { ????cout?<<? ????????boost::format("writing?%1%,??x=%2%?:?%3%-th?try") ????????%?"toto" ????????%?40.23 ????????%?50 ????????<<endl; ????format?f("a=%1%,b=%2%,c=%3%,a=%1%"); ????f?%?"string"?%?2?%?10.0; ????cout?<<?f.str()?<<?endl; }
?
5.boost::tokenizer
boost::tokenizer是用于切割字符串的,類似于Java里面的StringTokenizer。
#include?<boost/tokenizer.hpp> void?test_tokenizer() { ????string?s("This?is??,?a?,test!"); ????boost::tokenizer<>?tok(s); ????for(tokenizer<>::iterator?beg=tok.begin();?beg!=tok.end();++beg) ????{ ????????cout?<<?*beg?<<?" "; ????} }
?
6.boost::thread
boost::thread是為了提供跨平臺的thread機制。利用boost::function來完成委托。
#include?<boost/thread.hpp> void?mythread() { ????cout<<"hello,thread!"<<endl; } void?test_thread() { ????boost::function<?void?()?>?f(mythread); ????boost::thread?t(f); ????t.join(); ????cout<<"thread?is?over!"<<endl; }
7.boost::serialization
boost::serialization提供object的序列化功能。而且提供好幾種序列化的格式,比如text,binary,xml。
#include?<boost/archive/text_oarchive.hpp> #include?<boost/archive/text_iarchive.hpp> #include?<boost/archive/xml_oarchive.hpp> void?test_serialization() { ????boost::archive::text_oarchive?to(cout?,?boost::archive::no_header); ????int?i?=?10; ????string?s?=?"This?is?a?test "; ????to?&?i; ????to?&?s; ????ofstream?f("test.xml"); ????boost::archive::xml_oarchive?xo(f); ????xo?&?BOOST_SERIALIZATION_NVP(i)?&?BOOST_SERIALIZATION_NVP(s); ????boost::archive::text_iarchive?ti(cin?,?boost::archive::no_header); ????ti?&?i?&?s; ????cout?<<"i="<<?i?<<?endl; ????cout?<<"s="<<?s?<<?endl; }
8.boost::function
boost::function就是所謂的泛函數,能夠對普通函數指針,成員函數指針,functor進行委托,達到遲調用的效果。
#include?<boost/function.hpp> int?foo(int?x,int?y) { ????cout<<?"(foo?invoking)x?=?"<<x?<<?"?y?=?"<<?y?<<endl; ????return?x+y; } struct?test { ????int?foo(int?x,int?y) ????{ ????????cout<<?"(test::foo?invoking)x?=?"<<x?<<?"?y?=?"<<?y?<<endl; ????????return?x+y; ????} }; void?test_function() { ????boost::function<int?(int,int)>?f; ????f?=?foo; ????cout?<<?"f(2,3)="<<f(2,3)<<endl; ????test?x; ???? ????boost::function<int?(test*,int,int)>?f2; ????f2?=?&test::foo; ? ????cout?<<?"f2(5,3)="<<f2(&x,5,3)<<endl; }
9.boost::shared_ptr
boost::shared_ptr就是智能指針的實現,不象std::auto_ptr,它是可以stl的容器一起使用的,非常的方便。
#include?<boost/shared_ptr.hpp> class?Shared { ????public: ????????Shared() ????????{ ????????????cout?<<?"ctor()?called"<<endl; ????????} ????????Shared(const?Shared?&?other) ????????{ ????????????cout?<<?"copy?ctor()?called"<<endl; ????????} ????????~Shared() ????????{ ????????????cout?<<?"dtor()?called"<<endl; ????????} ????????Shared?&?operator?=?(const?Shared?&?other) ????????{ ????????????cout?<<?"operator?=??called"<<endl; ????????} }; void?test_shared_ptr() { ????typedef?boost::shared_ptr<Shared>?SharedSP; ????typedef?vector<SharedSP>?VShared; ????VShared?v; ????v.push_back(SharedSP(new?Shared())); ????v.push_back(SharedSP(new?Shared())); }
總結
以上是生活随笔為你收集整理的boost常用库的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。