http://www.cppblog.com/chefZ/archive/2008/12/05/68679.aspx
http://www.bianceng.cn/Programming/net/201102/24226_7.htm