先立个flag, 从此以后有三不聊:不聊政治,不聊宗教,不聊教育孩子。这三个主题有个共同的特点:大家都有自己的观点,大家都认为自己的观点对,但是其实谁的观点还都没啥用!而且这些话题插嘴的门槛还特别底, 这就是为啥容易吵吵起来的原因了。
所以我决定聊点C++语言,不好意思,这个热心网友想插嘴还不太容易。 今天主要聊聊我最近发现的C++的一个现象:那就是模板看起来很难, 其实不难; 异常看起来很简单,其实很难;多线程看起来很难,其实TMD更难。
首先聊模板,talk is cheap,show me the code。下面这段眼花缭乱的代码要是读懂还真不容易,不过他难就难在了语法上,其实就是利用编译期间,模板实例化的时候的SFINAE特点,来判定一个类是否有serialize这个函数。就这么简单。我知道你想骂人了,好端端的你就直接说中文就好,为啥总拽洋文呢? 因为这个词一旦翻译成中文,你要是看到了就想打人了。 这个单词就是“替换失败不是错误”这几个词的首字母缩写。不知道你怎么想,我个人觉得,同样是不懂,但是英文说出来更牛逼一点,是不?
template struct hasSerialize{
typedef char yes[1];
typedef yes no[2];
template struct reallyHas;
template static yes& test(reallyHas* /unused/) { }
template static no& test(…) { /* dark matter */ }<