原貼最初發表在QQ空間:普通C++程式員 VS 文藝C++程式員,http://user.qzone.qq.com/31731705/blog/1323153107
BBS上看到一個講C++的文章,
C++ 這孩子 是不是誤入歧途了?,讓我想起了普通青年和文藝青年。
看這個經典的NB
程式,求一個數有多少bit
。J
普通C++
程式員
namespace traditional { int bits_of(int remain) { if (remain) return 1+bits_of( remain>>1 ); return 0; } int bits_of(void) { return bits_of(~(int)0); } }
文藝C++
程式員
namespace modern { template<int,typename THEN, typename ELSE> struct IF { typedefTHEN type; }; template<typename THEN, typename ELSE> struct IF<0,THEN,ELSE> { typedef ELSE type; }; template<typename T, T X> struct zero { static const Tvalue = X; }; template<typename T, T X> struct bits_of { typedef typenameIF<X, bits_of<T,(X>>1)>, zero<T,0> >::type type; static const Tvalue = type::value + !!X; }; }
還有文青的unit test,
typedef int a0[bits_of<int,0>::value==0? 1: -1];typedef int a1[bits_of<int,1>::value==1? 1: -1];typedef int a2[bits_of<int,2>::value==2? 1: -1];typedef int a3[bits_of<int,3>::value==2? 1: -1];typedef int a4[bits_of<int,4>::value==3? 1: -1];typedef int a7[bits_of<int,7>::value==3? 1: -1];typedef int a8[bits_of<int,8>::value==4? 1: -1];typedef int a15[bits_of<int,15>::value==4? 1: -1];typedef int a16[bits_of<int,16>::value==5? 1: -1];
第三類C++
程式員
namespace third_party { // 您確定您能看懂? }