boost 在实际项目中的使用

原文链接:http://blog.csdn.net/linuxchyu/article/details/9230641

对于 boost 在实际项目中的使用应该有一个相对客观的态度,

既不能过分使用,在项目中铺满 boost,又不能对其畏之如虎,不敢使用。


我想实际游戏开发中,我们的团队伙伴大多应该是跟我一样程度的 —— 对 c++ 有一定的了解,又绝对称不上专家。

所以,我们使用 boost 应该有下面这些原则或者说是注意事项:


1、不要认为 boost 非常庞大就一概否定,认为游戏客户端里面绝对不能或者完全没有必要加 boost。

我们完全可以使用 bcp 裁剪我们需要的模块,虽然 boost 的牵连性还是很大的,

裁剪一个智能指针有可能会裁剪出一大堆文件,但是至少不会把 100mb+ 的代码都加到项目中。


2、我们常用的一些 boost 库已经加到 tr1 里面了,我们常用的开发环境又都是支持 tr1 的

vs2010、xcode、android ndk。所以如果我们只是用这些功能的话那么确实没有必要引入 boost。


3、尽量避免需要编译的 boost 库的使用,只使用头文件形式的。

如果一定要使用的话,那么可以选择把实现文件直接加到项目中,当做我们自己的代码来进行维护。

这样 ios 和 android 环境维护起来要方便很多。

如果我们只在 windows 下进行开发,那么 boost 的 auto_link 机制也还方便。

至少最近几个版本的 boost 编译起来已经相当方便了,方便到不需要教程的地步了。


4、尽量避免平台相关的库的使用。

虽然像 filesystem 这样的库使用起来很方便,boost 也帮助我们封装了平台依赖。但是还是尽量要避免这些库的使用。

因为 boost 虽然支持 ios 和 android,但并不意味着这些库在 ios 和 android 下都能正常工作。

比如我之前就碰到过,filesystem 的某个函数在 ipad2 上会崩溃,但是在 iphone 和 ipad1 上面又正常。

还有 boost::mutex 在 ios 下怎么也锁不住,但是自己简单封装下 pthread 又可以正常工作。

所以与平台紧密相关的操作还是自己维护的好,否则就是要替 boost debug 代码了。


5、不要认为 boost 什么都好,就在代码里面充斥着 boost 的代码。

因为 boost 再工业化强度,也仅仅是“准”标准库。

不是人人都会使用 boost,也不是人人都愿意学习 boost。

代码中大量出现 mpl 什么的绝对不是一个聪明的选择。


6、boost 相关的头文件,要么加入到预编译头里面,要么放到实现文件里面,

千万不要放到会被大量引用,但是又没有预编译的头文件。因为 boost 里面大量充斥着模板,编译起来时间相当漫长。


7、我常用的一些 boost 库:

smart_ptr function bind 这三个不用多说了,已经加到 tr1 里面的,如果还不会的话,就跟 c++ 程序员不会 stl 一样,直接面壁去。

algorithm/string 字符串算法库,这个相当好用并且很基础。如果不用这个话,那肯定还是要自己重复造轮子的。

format 这个见仁见智,如果不喜欢它的语法的话,那就自己封装个。这个比 vsnprintf 最大的好处就是安全性,不会因为参数传错而崩溃

pool 这个还没有真正使用,不过如果我有内存池的需要的话,绝对不会介意使用这个

regex 这个也是加到 tr1 里面的,不过 ios 下面貌似没有。不管怎么说,如果用到正则表达式,这个还是首选。虽然它有一大堆实现文件。


8、一些我个人绝对不会使用的库:

test 用起来很不方便,不如用cxxtest

preprocessor 游戏开发需要词法分析吗?  加上这个库会让你的工程编译时间变成一个世纪那么长

mpl  牛人可以使用它来封装自己的模板库,但是接口中一定不要暴露出相关的东西。因为这个东西可不是人人都懂的。

lambda 虽然tr1中也有lambda,但是还是不要为了省两行代码加入匿名函数了。自己看着爽了,别人就都看不懂了。毕竟c++是c++,java是java

date_time 这么简单的东西,还是自己封装下好了。牵扯到夏时令还有时区的时候,还是自己写的更加放心

property_tree 可能我会封装一个类似的兼容 xml 和 json 和 ini 的配置读取方式,但是肯定不会是 property_tree 这样的形式,应该更加简洁一些,即便扩展性差些。

thread 前面说过了,自己封装下也不麻烦,不就是 pthread 吗?


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值