随笔-5  评论-31  文章-0  trackbacks-0

转载请注明出处。谢谢

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)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理