以二进制格式输出对象基本思路是直接将对象的内存数值以二进制的格式输出,但是如何获取对象内存的二进制结构 Gd%X> ~
是关键。解决方法是通过位操作找出对象内存的每一个bit的值。并把该方法封装成一个迭代器。 {?+dVLa^;
要注意的问题是位操作符只能对整数类型进行操作,为了对所有类型的对象都有效,必须将对 E\_Wpk
象当作char数组来处理。 J 7/)XS
template<class Container> Q$`u=-h|
class bit_iterator : public std::iterator<bidirectional_iterator_tag, \gU=B|W
void, void> s3Wjg
{ 0`H)c)
pP
public: eV"Za.a.
explicit bit_iterator(Container& c) : m_container(&c) 03)R_A
{ )NjxKSiU@
m_size = 8*sizeof(Container); FS+v YqwK
m_index = 0; !dcGBj
} |0wHNRN_
explicit bit_iterator() : m_container(0) !kpnBgm U
{ ^7p>p8
m_size = 8*sizeof(Container); 3Yb2p!o
m_index = m_size; ZH
s' #
} <T^:`p/]4
bool operator* () 1woBw>g
{ `i"7; _HoV
char mask = 1; <+r<3ZBA
char* pc = (char*)m_container; g~/@`Z2Y
int i = (m_size-m_index-1)/8; IncHY?ud<