看这个经典的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
{
// 您确定您能看懂? ? ?
}