以二进制格式输出对象基本思路是直接将对象的内存数值以二进制的格式输出,但是如何获取对象内存的二进制结构 Z`rK\Bc
是关键。解决方法是通过位操作找出对象内存的每一个bit的值。并把该方法封装成一个迭代器。 >Z *iE"9"
要注意的问题是位操作符只能对整数类型进行操作,为了对所有类型的对象都有效,必须将对 vKU`C?,L
象当作char数组来处理。 :bwM]k*$
template<class Container> =g@R%NDNV
class bit_iterator : public std::iterator<bidirectional_iterator_tag, |Dg;(i?
void, void> {T&v2u#S
{ Y5HfN[u^7
public: 5 d+<EF+N
explicit bit_iterator(Container& c) : m_container(&c) hF2/
y.:P
{ Yy]T
J
m_size = 8*sizeof(Container); :v`o6x8
m_index = 0; K>kLUcC7Z
} <D;MT96SG
explicit bit_iterator() : m_container(0) "LOnDa7E^
{ [#0Yt/G
m_size = 8*sizeof(Container); C*7!dW6
m_index = m_size; 'V&2Xvl%
} -&im