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()));
}