普通C++程序员 VS 文艺C++程序员

2014-11-24 12:32:26 · 作者: · 浏览: 0

BBS上看到一个讲C++的帖子, C++ 这孩子 是不是误入歧途了?,让我想起了普通青年和文艺青年。

看这个经典的NB 程序,求一个数有多少bit 。

普通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

struct IF { typedefTHEN type; };


template

struct IF<0,THEN,ELSE> { typedef ELSE type; };


template

struct zero

{

static const Tvalue = X;

};


template

struct bits_of

{

typedef typenameIF>1)>, zero >::type type;

static const Tvalue = type::value + !!X;

};

}
还有文青的unit test,

typedef int a0[bits_of::value==0 1: -1];
typedef int a1[bits_of::value==1 1: -1];
typedef int a2[bits_of::value==2 1: -1];
typedef int a3[bits_of::value==2 1: -1];
typedef int a4[bits_of::value==3 1: -1];
typedef int a7[bits_of::value==3 1: -1];
typedef int a8[bits_of::value==4 1: -1];
typedef int a15[bits_of::value==4 1: -1];
typedef int a16[bits_of::value==5 1: -1];
第三类C++ 程序员

namespace third_party

{

// 您确定您能看懂?

}


摘自 Viper的专栏