C++(www.cppentry.com)11中有很多激动人心的特性,但是相应的使得C++(www.cppentry.com)更加复杂。。。 新标准还修改了原有标准库,并增加了很多内容。
在学习新标准的过程中动手写了个 为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++(www.cppentry.com)0X支持。 |