没有模板代码膨胀的STL:三、开发者指南

总目录
一、设计目标与实现思路
二、使用方法与注意事项
三、开发者指南
四、一些讨论和个人心得

上一篇文章《使用方法与注意事项》描述了在项目中应用POD_STL的方法。本篇文章则是针对想要加入POD_STL开发工作的朋友的。当然,开发者也应当知晓项目的设计思路和使用需求。所以,想参与开发的朋友不光要阅读这篇文章,也应当仔细阅读两面两篇:《设计目标与实现思路》和《使用方法与注意事项》。

项目范围

POD_STL项目的主要范围是实现最新STL标准规定的接口。如果有人觉得其他公共库(比如BOOST)中的部分工具对于C++开发者也非常有用,可以考虑添加进来。但我不会把整个BOOST全部加入到项目中。对于不属于STL标准的工具,建议开发者做成可裁减的,将相关代码放入独立目录,不要强制使用者包含。

POD_STL不会加入不通用的特性,比如和具体业务强相关的代码。有相关需求的人员请自行拉分支实现。

对于和IO操作相关的特性(比如iostream),建议只实现与平台无关的内存操作(如stringstream)。其他平台强相关IO操作(如cin、cout、fstream)建议放到独立目录中,让使用者可以方便的裁减,以避免出现平台兼容性问题。

项目当前还缺少以下STL特性:stackqueuehash_sethash_multisethash_maphash_multimapvalarraybitset部分算法(包括heap)、iostream。这些正等待着各路程序员们来参与开发!

与其他STL版本的关系

POD_STL的开发过程中大量借鉴了STLport 5.2.1(当今最新版本)的实现方法,在代码架构、命名规范等方面都有与STLport类似之处。但同时也针对自身特点做了大量修改,并且修正了STLport的一些BUG(参见《STLport源代码中的一个BUG》)。

开发者们应当避免两个极端:
1、不要闭门造车。自己实现之前多看看其他STL版本是怎么做的,借鉴其好的思路和做法。
2、不要全盘照抄别人的代码。应当在看懂其他版本实现的基础上,按照POD_STL的特点和规范进行重写。

编程规范与命名约定

1、遵守公司C语言和C++语言编程规范。
2、所有代码文件以小写字母和下划线命名,对外的头文件严格按照STL标准命名,非对外的头文件以下划线开头。STL头文件放入headers子目录,非模板实现放入cpp子目录。
3、不属于STL标准的特性,应当考虑独立子目录存放,让用户可以方便的裁减。
4、对于容器类,原则上要求所有复杂的内部函数都实现成非模板类的非模板函数,所有带模板的函数(函数模板或者类模板的成员函数)都实现为简短的内联函数。
5、容器中新插入的元素,如果没有指定的值,应当保证调用其对应类型的默认构造函数。对于指针元素,必须保证新插入的指针初始化为空。
6、容器应当考虑可以在一定条件下将vectorstring作为内部元素,见《设计目标与实现思路》。
7、STL算法函数功能应当与标准STL完全一致。
8、不要在任何地方使用newdelete,所有动态内存分配释放统一调用STL_MallocSTL_Free两个接口。
9、不要使用任何C++库函数、C++异常处理和RTTI特性。可以使用C库函数。C库函数应当用以VOS开头的公司DOPRA平台函数,并且在_base_depends.h文件中声明,base_depends.cpp文件中定义函数体。
10、不使用C风格类型转换((type)value),所有类型转换必须使用C++风格。(static_cast等)
11、模板类型参数定义用typename关键字,不要用class,以更好地和类定义区分。
12、标识符命名规则:
1)所有对外接口严格按照STL标准命名。比如vector::push_back。此规则优先于其他所有规则!
2)局部变量用两个下划线开头,只包含全小写字母和下划线,如:__data_size
3)全局函数(包括全局函数模板)用一个下划线开头,只包含全小写字母和下划线,如:_destroy_range
4)类型名用一个下划线开头,使用驼峰风格,每个单词第一个字母大写,单词间不分隔。如:template <typename _Key, typename _Compare, typename _Value, typename _Traits> class _RbTree(注意模板类型参数也是一种类型,要按此方式命名)
5)类的普通成员函数用_M_开头,只包含全小写字母和下划线,如:_M_push_back
6)类的静态成员函数用_S_开头,只包含全小写字母和下划线,如:_S_rotate_left
7)类的普通成员变量用__M_开头,只包含全小写字母和下划线,如:__M_end_of_storage
8)类的静态成员变量按照公司编程规范中对静态变量的要求用s_开头,只包含全小写字母和下划线,如:s_shared_null

质量保证措施

POD_STL源代码中test目录下存放cppunit测试框架和所有测试用例。新增的特性应当同时提交完备的测试用例,要求至少测试到所有对外接口。

虽然当前项目工程是VS2013工程,但是开发者也可以使用其他编译器测试。但不要用太老的编译器(比如VC6)。

代码中对于不应当出现的错误(如数据一致性校验),应用STL_ASSERT宏进行断言。但对于运行时允许出现的情况不能用这个宏判断。所有用例要求能在debug模式下跑过。

测试框架中带有内存泄漏检测机制,在STL_Malloc接口中记录内存分配,STL_Free接口中记录内存释放。每个用例结束后如果有内存没有释放会自动报错。

下一章:没有模板代码膨胀的STL:四、一些讨论和个人心得

POD_STL的全部代码已上传到GitHub开源平台,欢迎有兴趣的朋友参与开发和提出点评。

链接: https://github.com/Goalsum/POD_STL
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值