转载请注明出处。谢谢
C++11中有很多激动人心的特性,但是相应的使得C++更加复杂。。。
新标准还修改了原有标准库,并增加了很多内容。
在学习新标准的过程中动手写了个 为std::tuple增加格式化/序列化能力的一小段代码
#define DECLARE_TUPLE_SERIALIZATION_FUNCTION(FUNC_NAME,BEG,SEP,END) \
namespace sjdfsjfyttsaihfah6755jsdf554433356sdf{ \
template <typename Tuple,std::size_t N> \
struct tuple_printer \
{ \
static void print(std::ostream& os,const Tuple& t) \
{ \
os<<std::get<std::tuple_size<Tuple>::value - N >(t)<<SEP; \
tuple_printer<Tuple,N-1>::print(os,t); \
} \
}; \
\
template <typename Tuple> \
struct tuple_printer<Tuple,1> \
{ \
static void print(std::ostream& os,const Tuple& t) \
{ \
os<<std::get<std::tuple_size<Tuple>::value-1>(t); \
} \
}; \
} \
template <typename Tuple> \
void FUNC_NAME(std::ostream& os,const Tuple& t) \
{ \
os<<BEG; \
sjdfsjfyttsaihfah6755jsdf554433356sdf::tuple_printer<Tuple,std::tuple_size<Tuple>::value>::print(os,t); \
os<<END; \
}
实现成宏是为了使用起来更方便,可以随意指定 函数名 前缀 分隔符 和 后缀。
使用方法如下:
DECLARE_TUPLE_SERIALIZATION_FUNCTION(serialize_tuple,"<"," , ",">")
int main()
{
int i=10;
auto a = std::make_tuple(3,"lala",i,'c');
serialize_tuple(std::cout,a);
}
输出为:
<3 , "lala" , 10 , c>
测试环境为GCC 4.5,注意编译时候请打开C++0X支持。
posted on 2011-11-28 05:17
江浸月 阅读(1995)
评论(0) 编辑 收藏 引用