为std::tuple增长格式化/序列化能力

转载请注明出处。谢谢

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支持。
相关文章
相关标签/搜索