boost库的常用组件的使用(ZT)

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  <<   " \n " ;
 } 

 

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\n " ;
 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;
  /* f = std::bind1st(
      std::mem_fun(&test::foo), &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()));
}  

时间: 2024-10-06 12:53:41

boost库的常用组件的使用(ZT)的相关文章

boost库之tokenizer的使用

    在tokenizer出现之前,如果我们要对一个字符串进行分割,可能要自己封装一个函数.如果有n种不同的分割规则,那么你要封装n个不同的分割函数--太麻烦了!现在好了,Boost库的tokenizer封装了统一的语法来分割字符串,并且提供了三种常用的分割方式,足以满足我们的绝大多数编程需求.    tokenizer主要由分割器和迭代器两部分组成.分割器用于指定字符串的分割规则,如果不指定任何分割器,则tokenizer默认将字符串以空格和标点(键盘上除26个字母(包括大小写)和数字外的其

Boost库在Windows平台下的编译

最近正在学习Boost库,过一久要用它来进行一些跨平台的开发:使用thread线程库来开发多线程 的程序(就是我的那个CodingWar项目:-P),所以自己动手进行了下面的Boost配置编译工作. 一.编译前的准备 我的VC++2005安装在"D:\Microsoft Visual Studio 8\VC"目录:下载boost库后解压, 根目录为:"D:\C_C++\boost_1_33_1",可参考改为相应的目录即可. 二.编译步骤 1.执行:"D:\

VS2008下直接安装使用Boost库1.46.1版本

 Boost库是一个可移植.提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一. Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容.在C++社区中影响甚大,是不折不扣的"准"标准库. Boost由于其对跨平台的强调,对标准C++的强调,与编写平台无关.大部分boost库功能的使用只需包括相应头文件即可,少数(如正则表达式库,文件系统库等)需要链接库.但Boost中也有很多是实验性质的东西,在实际的开发中实用需要谨慎.boos

Android开源的常用组件地址分享【干货】

了解常见的开源项目,可以扩大我们的视野,知道有哪些可以利用的资源,对于我们平常的设计和开发很有好处 UI相关 图片 ps://github.com/nostra13/Android-Universal-Image-Loader" target="_blank">Android-Universal-Image-Loader:com.nostra13.universalimageloader:异步加载.缓存.显示图片 ImageLoader:com.novoda.image

C++中Boost库裁剪与其应用详解_C 语言

前言 Boost 库涵盖的范围极广,有字符串和文本处理相关子库比如 format 库和 regexp 库,有容器相关子库比如 variant 库(和 Qt 的 QVariant 有得一拼),有迭代器子库比如 tokenizer 库(可以把字符进行 tokenize),还有算法.函数对象和高阶编程相关子库如functional 库.lambda 库和 signal 库,还有泛型编程.模板编程子库如 call traits.mpl,还有并发编程相关的 thread 库,等等等等. Boost 是如此

第十六篇 其它的ASP常用组件

当你用 ASP 编写服务器端应用程序时,必须依靠 ActiveX 组件来强大 Web 应用程序的功能,譬如:你需要连接数据库,对数据库进行在线操作等等. 上两篇中作者给大家介绍了 AD Rotator. Database Access 等组件的使用方法,今天我们接着来看看其它的一些 ASP 常用组件. 一. Browser Capabilities 组件众所周知,并不是所有浏览器都支持现今 Internet 技术的方方面面.有一些特性,某些浏览器支持而另一些浏览器却不支持,如 : ActiveX

第十六课:其它的ASP常用组件

当你用 ASP 编写服务器端应用程序时,必须依靠 ActiveX 组件来强大 Web 应用程序的功能,譬如:你需要连接数据库,对数据库进行在线操作等等. 上两篇中作者给大家介绍了 AD Rotator. Database Access 等组件的使用方法,今天我们接着来看看其它的一些 ASP 常用组件. 一. Browser Capabilities 组件众所周知,并不是所有浏览器都支持现今 Internet 技术的方方面面.有一些特性,某些浏览器支持而另一些浏览器却不支持,如 : ActiveX

ASP教程:第十六篇 其它的ASP常用组件

当你用 ASP 编写服务器端应用程序时,必须依靠 ActiveX 组件来强大 Web 应用程序的功能,譬如:你需要连接数据库,对数据库进行在线操作等等. 上两篇中作者给大家介绍了 AD Rotator. Database Access 等组件的使用方法,今天我们接着来看看其它的一些 ASP 常用组件. 一. Browser Capabilities 组件众所周知,并不是所有浏览器都支持现今 Internet 技术的方方面面.有一些特性,某些浏览器支持而另一些浏览器却不支持,如 : ActiveX

其它的ASP常用组件

作者: 书生 当你用 ASP 编写服务器端应用程序时,必须依靠 ActiveX 组件来强大 Web 应用程序的功能,譬如:你需要连接数据库,对数据库进行在线操作等等. 上两篇中作者给大家介绍了 AD Rotator. Database Access 等组件的使用方法,今天我们接着来看看其它的一些 ASP 常用组件. 一. Browser Capabilities 组件众所周知,并不是所有浏览器都支持现今 Internet 技术的方方面面.有一些特性,某些浏览器支持而另一些浏览器却不支持,如 :