摘要:
什么是SFINAE?Substitution failure is not an error,匹配失败并不是错误,意思是用函数模板匹配规则来判断类型的某个属性是否存在,也就是说SFINAE可以作为一种编译期的不完整内省方法具体参见http://en.wikipedia.org/wiki/Substitution_failure_is_not_an_error案例:使用SFINAE判断模板参数是否是class(在很多场合这个trick非常有用):template<typename T>class isClassA{ typedef char _One; typedef struct{ 阅读全文
摘要:
什么是CRTP?Thecuriously recurring template pattern(CRTP) is aC++idiom in which a classXderives from a class template instantiation usingXitself as template argument.类X继承了一个以X作为模板参数的的模板,这就是CRTP,具体介绍请参看维基百科CRTP简介CRTP的意义是父类(接下来我们称之为CRTP父类,相应的子类成为CRTP子类)知道子类的类型,可以做一些虚函数做不到的事,比如维基百科里面提到的类计数,clone函数这两个东西用虚函数 阅读全文
摘要:
这是前几天跟一个同事合作的感慨宏:他写的代码用了一些很难看的宏,实际完成的却是很简单的功能,但是宏难以调试其实用模板也可以实现,而且好调试一点,当然这里最好还是写最直接的代码比较好无意义的封装:几个函数就能解决的问题,却用类封装了好几层,却由于对c++没有深刻理解,没有封装好,搞出bug来了,调试了7个小时,浪费了4个人总共4x7小时keep it simple,stupid,这是诸多unix哲学里面最好用的一条了,保持简单傻瓜,多快好省地写代码! 阅读全文