1.boost::any
boost::any是一种通用的数据类型,可以将各种类型包装后统一放入容器内,最重要的它是类型安全的。有点象COM里面的variant。
使用方法:
any::type() 返回包装的类型
any_cast可用于any到其他类型的转化
-
#include
-
void test_any()
-
{
-
typedef std::vector many;
-
many a;
-
a.push_back(2);
-
a.push_back(string("test"));
-
for(unsigned int i=0;i
-
{
-
cout<
-
try
-
{
-
int result = any_cast<int>(a[i]);
-
cout<
-
}
-
catch(boost::bad_any_cast & ex)
-
{
-
cout<<"cast error:"<
-
}
-
}
-
}
2.boost::array
boost::array仅仅是对数组一层薄薄的封装,提供跟各种算法配合的iterator,使用方法很简单。注意:可以使用{}来初始化array,因为array所有的成员变量都是public的。
-
#include
-
void test_array()
-
{
-
array<int,10> ai = {1,2,3};
-
for(size_t i=0;i
-
{
-
cout<
-
}
-
}
3.boost::lexical_cast
lexical_cast用于将字符串转换成各种数字类型(int,float,short etc.)。
-
#include
-
void test_lexical_cast()
-
{
-
int i = boost::lexical_cast<int>("123");
-
cout << i << endl;
-
}
4.boost::format
boost::format是用于替代c里面的sprintf,优点是类型安全,不会因为类型和参数不匹配而导致程序崩溃了,而且还可以重复使用参数。
-
#include
-
void test_format()
-
{
-
cout <<
-
boost::format("writing %1%, x=%2% : %3%-th try")
-
% "toto"
-
% 40.23
-
% 50
-
<
-
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
-
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
-
void mythread()
-
{
-
cout<<"hello,thread!"<
-
}
-
void test_thread()
-
{
-
boost::function< void () > f(mythread);
-
boost::thread t(f);
-
t.join();
-
cout<<"thread is over!"<
-
}
7.boost::serialization
boost::serialization提供object的序列化功能。而且提供好几种序列化的格式,比如text,binary,xml。
-
#include
-
#include
-
#include
-
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
-
int foo(int x,int y)
-
{
-
cout<< "(foo invoking)x = "<" y = "<< y <
-
return x+y;
-
}
-
struct test
-
{
-
int foo(int x,int y)
-
{
-
cout<< "(test::foo invoking)x = "<" y = "<< y <
-
return x+y;
-
}
-
};
-
void test_function()
-
{
-
boost::function<int (int,int)> f;
-
f = foo;
-
cout << "f(2,3)="<
-
test x;
-
-
boost::function<int (test*,int,int)> f2;
-
f2 = &test::foo;
-
-
cout << "f2(5,3)="<
-
}
9.boost::shared_ptr
boost::shared_ptr就是智能指针的实现,不象std::auto_ptr,它是可以stl的容器一起使用的,非常的方便。
-
#include
-
class Shared
-
{
-
public:
-
Shared()
-
{
-
cout << "ctor() called"<
-
}
-
Shared(const Shared & other)
-
{
-
cout << "copy ctor() called"<
-
}
-
~Shared()
-
{
-
cout << "dtor() called"<
-
}
-
Shared & operator = (const Shared & other)
-
{
-
cout << "operator = called"<
-
}
-
};
-
void test_shared_ptr()
-
{
-
typedef boost::shared_ptr SharedSP;
-
typedef vector VShared;
-
VShared v;
-
v.push_back(SharedSP(new Shared()));
-
v.push_back(SharedSP(new Shared()));
-
}
完
阅读(1510) | 评论(0) | 转发(0) |