以二进制格式输出对象基本思路是直接将对象的内存数值以二进制的格式输出,但是如何获取对象内存的二进制结构  lY*[tmz)  
是关键。解决方法是通过位操作找出对象内存的每一个bit的值。并把该方法封装成一个迭代器。 <(vCiH9~P  
 要注意的问题是位操作符只能对整数类型进行操作,为了对所有类型的对象都有效,必须将对 XJ2^MF2BU  
象当作char数组来处理。 2>*%q%81  
template<class Container> 
vSonkJ_  
class bit_iterator : public std::iterator<bidirectional_iterator_tag, yjJ5P`j]  
 void, void> OLI$1d_  
{ nI0[;'Hn,  
public: Tr^nkD{  
 explicit bit_iterator(Container& c) : m_container(&c) KRjV}\}  
 { 4e;QiTj  
  m_size  = 8*sizeof(Container); J<Pw+6B~  
  m_index = 0; L. ]$6Q0  
 } &sF^Fgg{  
 explicit bit_iterator() : m_container(0) r!,}Z=cGe  
 { fvb=#58N_  
  m_size  = 8*sizeof(Container); tl'n->G>v  
  m_index = m_size; C{2xHd/*  
 } m! U9m  
 bool operator* () oA1a /[#  
 { w1;hy"zPsj  
  char mask = 1; )G7=G+e;  
  char* pc = (char*)m_container; :W@#) 1=  
  int i     = (m_size-m_index-1)/8; Kt0(gQOr0  
  int off   = (m_size-m_index-1)%8; ?'"X"@r5  
  mask <<=off; 9;xM%  
  return  pc & mask; TNJG#8 n%Y  
 } MQKfJru7  
 bit_iterator<Container>& operator++() .5!t:FPOv  
 { gl).cIp w  
  m_index++; <w\:<5e '  
  return *this; "[:iXRu  
 } k<+0o))  
 bit_iterator<Container>& operator++(int) S.!UPkW H  
 { :$+-3_oLMQ  
  m_index++; @|'5n  
  return *this; wW>)(&!F  
 } w\}?( uO  
 bool operator==(bit_iterator<Container>& bitIt) >[6{LAe~hp  
 { ?bw4~  
  return m_index == bitIt.m_index; KR"M/#   
 } ~ H6r.:]  
 bool operator!=(bit_iterator<Container>& bitIt) _4 cvX  
 { <_(/X,kBK  
  return !(*this == bitIt); c)0amM  
 } $wYFEz  
protected: >hH0Q5aL  
 Container* m_container; ,ZS6jZ	  
private: pKS
{ 6P   
 int m_size; {-BRt)L[  
 int m_index; -Z-IF#%  
}; ](F#`zUQ  
 9_sA&2P{uV  
用该迭代器可以将任意类型对象以二进制格式输出: rxme(9M  
double a = 10; MQ)L:R`L  
copy(bit_iterator<double>(a), bit_iterator<double> (), ostream_iterator<bool>(cout, ""));