以二进制格式输出对象基本思路是直接将对象的内存数值以二进制的格式输出,但是如何获取对象内存的二进制结构 +.!
F]0ju
是关键。解决方法是通过位操作找出对象内存的每一个bit的值。并把该方法封装成一个迭代器。 6f v{?0|
要注意的问题是位操作符只能对整数类型进行操作,为了对所有类型的对象都有效,必须将对 "6[fqW65
象当作char数组来处理。 5k)/SAU0
template<class Container> jhr:QS/9
class bit_iterator : public std::iterator<bidirectional_iterator_tag, x9hkE!{8
void, void> wi|'pKG
{ DZ<q)EpC
public: & w&JE]$ 5
explicit bit_iterator(Container& c) : m_container(&c) o $7:*jU
{ ifHQ2Ug9
m_size = 8*sizeof(Container); #/=s74.b
m_index = 0; S|CN)8Jsi
} fzT|{vG8
explicit bit_iterator() : m_container(0) z'z_6]5
{ ,9SBGxK5`
m_size = 8*sizeof(Container); =aX;-
m_index = m_size; z/dpnGX
} (P%{Tab
bool operator* () _a|-_p
{ airg[dK
char mask = 1; =]X_wA;%
char* pc = (char*)m_container; Zi<Y?Vm/,O
int i = (m_size-m_index-1)/8; e*{'A
int off = (m_size-m_index-1)%8; "j#;MOK
mask <<=off; j*B,b4
return pc & mask; gY9HEfB
} &FH