转载请注明出处。谢谢
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支持。