设为首页 加入收藏

TOP

为std::tuple添加格式化
2011-12-10 21:50:30 来源: 作者: 【 】 浏览:641
Tags:std::tuple 添加 格式
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支持。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++11中值得关注的几大变化 下一篇 Linux 多线程通信

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: