C++编程规范之模板与泛型

来源:互联网 发布:淘宝短信营销软件 编辑:程序博客网 时间:2024/05/22 15:19
模板与泛型
第64条:理智地结合静态多态性和动态多态性
摘要:努力让这二者互补,让1+1>2。
       涉及到模板的话题总是很复杂,如果将模板和虚拟结合到一次,本来就是个不简单的话题。
       动态多态性的优点是基于超集/子集关系的统一操作,动态绑定和分别编译。静态多态性的优点是基于语法和语义的统一操作,静态绑定和高效率。
在ACE中使用比较多的这种组合,将来可能会写一下设计的分析。
 
第65条:有意地进行显式自定义
摘要:显式出错的可能性要小于隐式
       在模板中经常出现一些函数,函数的实现中经常有一些辅助函数,这些辅助函数往往是引起疑惑的根源,这些辅助函数究竟是模板本身定义的,还是外部可见的,或者是依赖模板参数的?这一问题在一般情况下也存在,那是为什么调用成员函数显示调用this->总要好一些的原因。这个问题在模板中,更加严重一点,所以在面对这个问题的时候显示的表达一下比较好,会避免出现编译器自做主张的情况。

       为了避免这一点,可以将模板内部调用的辅助函数都放入其自己的内嵌名字空间,并用显示的限定调用它们。要避免依赖名,类似于template<typename T>class C:T{}; template<typename T>class C:X<T>{};之类的情况最好避免。

 
第66条:不要特化函数模板
摘要:编写自己的函数模板,不要特化别人的函数模板。
对于函数模板的特化要小心,函数模板不存在偏特化,只能完全特化。函数模板特化不能参与重载,面对这么低的优先级,就不要考虑了。写非模板的重载函数吧。
 
第67条:不要无意地编写不通用的代码
摘要:依赖抽象而非细节
       对迭代器的比较使用!=,而不是<;使用迭代器代替索引,除非没有迭代器;使用empty()代替size()==0;如果不需要修改就使用常量;依赖接口而不是实现。
 
原创粉丝点击