生活随笔
收集整理的這篇文章主要介紹了
boost常用库案例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原文地址:http://cjbskysea.blogbus.com/logs/61808617.html
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()));} 完
轉載于:https://www.cnblogs.com/wangkangluo1/archive/2011/07/19/2110746.html
總結
以上是生活随笔為你收集整理的boost常用库案例的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。