C++的愤青 C++98中曾经的一些stl class的接口过于晦涩,例如最最最基本的string,其接口简直可以说是摧残人性。C++的list等几乎所有需要分配额外node的容器都是通用的,但是并非高效率的,在高性能的情况下并不适合,不如使用linux中的list_head这种预先需要被插入元素有特定数据成员的方法,简洁,高效仍不失为一种优雅。C++0x 新增加的一些libs越来越沦为一些C++语言Gur
SlickEdit 一些使用技巧 SlickEdit 使用了几天以后,发现不仅仅是自动提示,代码浏览,它提供的编辑功能也非常强大。如果说 SourceInsight 和 SlickEdit 在浏览代码上面各有所长,那么编辑这方面 SE 和 SI 就不是一个级别了。下面是我知道的一些使用技巧,老鸟就不用看了,哈哈.1. 如果发现路径的/显示成了中文的¥字符,那么可以设置一下字体就可以了如果在XP下,直接将所有的字体
SlickEdit C/C++开发的利器 个人使用最熟悉,感觉也最好的C/C++ IDE环境是VC6+Visual Assist的组合,非常稳定,速度快,快捷键简单实用,界面简洁大方,几乎不需要使用鼠标进行任何操作,源代码直接的跳转也很舒服。不过如果工程文件不能在VC下编译,浏览功能就失效了,因为VC需要首先编译,然后生产一个BSC文件。如果不能编译,几乎就不能浏览。VS2003很早试用过几天,实在受不了它的“VB Friendly
symbian 下 APP 中使用 singleton 下面这个是基于Noka 中的"tip of this month"中提供的一个例子而实现singleton的另外一种方式:#include templateclass DefaultCreator{public: static T * Create() { return new (ELeave)T; }};template >class CStaticData :
symbian中的模板函数用于得到AppUi/Document/Application symbian的app没有全局数据, 一个做法是将它这些全局数据放在你的Document类或者AppUi类或者Application类中. 这些类都是全局唯一的.Symbian提够了一些宏 , 例如iAvkonAppUi, iAvkonViewAppUi 等等, 但有时候我们需要得到我们"自己的"AppUi对象, 自己的Document对象等. 下面的3个模板函数可以解决这些问题. templat
symbian 的c++ sdk 个人牢骚, 无知者无畏.在操作系统API这个层面上, 使用C++, 其中的面向对象的最重要的元素还不是多态, 而是封装, 也就是绝缘.Symbian在这个层面上远远不够,特别在它的UI框架中, 经常一个class N多长长的virtual 函数, 使得开发者无所适从,N多protected成员变量, 你说我派生自它,到底用还是不用了. 给赋个null行不行? private 成员变量就算了, N多
C++中的auto_ptr (修改版本) stl 文件中的 std::auto_ptr 在C++中的故事特别多, 在它的演变过程中至少出现了3个版本.http://www.josuttis.com/libbook/auto_ptr.html 这个连接里面有它完整的故事. VC6中STL带的auto_ptr( 带owner字段)的版本应该就是文中说的Version 2. 最新的Version里面包含了一个auto_ptr_ref, 这个是
boost 1.33 仍然没有network library boost 1.33 出来了, 仍然没有我期待很久的network library. boost中, 有不少是语法甜头, 或者接近语法甜头, 例如lambda, bind, assign, tuple等等, 不过不要小看这些甜头, 有时候, 例如bind的存在, 可以影响整个library的设计.regexp library据说是boost中用得最多的一个库, 它就是一个比较实用的utility
不要使用VC6自带的STL 今天一个VC6.0的程序折腾了一天, 最后实在无法定位错误, 只好使用VC7.1编译, 结果一切OK.由于程序中使用了不少STL的东西, 特别是容器等, 于是怀疑是VC6.0自带的STL问题, 于是又使用STLPort + VC6.0 编译了一次, 一切OK. 具体问题还不容易定位, 不过这个程序并不是我写的, 而是网上的一个例子程序, 应该也经过了很多人的测试. VC6自带的STL毛病多多, 包
C++ 在库中处理错误的一种方法 处理错误, 特别是在library中, 一直是一件麻烦的事情. library知道错误发生了, user知道如何处理这种错误, 但是问题是, library的作者不知道 user 想如何处理错误的. 通过返回值, 抛异常, 直接abort? 一般来说, 抛异常是最常用的一种方法, 但是某些情况下并不合适. 例如当发生错误是可以预计的, 并不是一个"异常事件"时, 或者简单的就是不能使用异常.一种更
Boost.Test 关于测试驱动开发, C++的库比较多, 选择是一个问题.Boost.Test是一个用于C++开发的测试框架, 类似的还有CPPUnit, 个人认为, CPPUnit过多的照搬了JUnit的框架, 有比较浓厚的Java风格, 用起来总感觉有些束缚, 不是那么native. CXXTest 我用过Symbian版本的, 好像需要Perl, 不过Symbian本身安装的时候就需要Perl, 因此对于S
Symbian 的 TCallBack symbian中的一些API接口都需要一个TCallBack类型的参数作为回调函数使用, 如果你需要指定到一个类的成员函数, 一般我们要写一段套路代码,1. 先定义一个静态函数, 接收一个void*指针, 2. 然后在这个函数中将这个指针转换成某个class的指针, 然后调用class中的某个成员函数, 例如 class CFoo { void start_timer() { i
Symbian 智能指针 在Symbian开发过程中, 由于没有确定性析构, 最让人烦躁的就是Cleanup Stack的操作, 当在一个函数中使用局部变量时, 要记得PushL, 然后在函数末尾, 还要PopAndDestroy, 变量一多, 头昏脑胀,都找不到北了, 经常被Panic, 而且在VC6窗口中还不知道到底是哪行的问题, 只能单步调试, 一直到程序crash. 然后知道上一行就是问题所在.下面是我写的一个智
我喜欢Symbian Symbian 是Nokia,爱立信等高端PDA手机中常用的一个操作系统, 原生的SDK是C++, 所有的API都是直接使用C++语法, 当然为了兼容的原因, 仍然提供了标准C library, 不过功能并不完善, 在symbian中也不推荐使用, 不过我觉得用也无妨,, 因为C的接口比较简单. Symbian是一个比较陈旧的操作系统, 使用C++开发的时间大概在90年代早期, 基本上没有用到什么
简单但还比较实用的模板技术 今天上google, 结果搜到 codeproject 上的一个关于写Windows 注册库的文章http://www.codeproject.com/system/registry_value.asp#xx1111845xx真正大开眼界, 其中使用的模板技术很"直白", 不想boost那样复杂, 但是又很好地和实际开发结合起来了, 结果在代码中写注册库及其简单, 估计即使是开发一个script语
人与继承的C++实现 allaboutprogram 上面的一个帖子:如果上帝是程序员,我们每个人不用说了,肯定是人的每个实例,但是上帝会把人定义为接口呢还是类?究竟我们是继承了人这个基类,还是实现了人的接口?人妖这个类怎么就能变过来了?双胞胎怎么生成的?连体婴儿呢?我的看法是:人是类, 而不是接口, 有些东西人是天生就有的, 因此人应该是类.人妖属于保护继承, 隐藏了一些细节, 同时也覆盖了某些函数. 既然是prot
C++ Templates (给模板参数命名2) 上面那个帖子的实现手法不太好, 当client使用的时候, 还是需要 BreadSlicer, Policy2_is > bc;复杂的嵌套模板语法, 如果能够去掉PolicyN_is, 例如可以这样 BreadSlicer如果定制其中的policy2, 这样 BreadSlicer bc;如果需要定制2, 3, 这样 BreadSlicer bc;与顺序无关, 先写3, 再写2也可以 BreadS
C++ Templates (给模板参数命名) 看C++ Templates 16.1 Named Template Arguments书中的例子实现手法使用多重/虚拟继承, 实现手法感觉比较诡秘. 但是至少告诉我是可以实现的. 于是干脆自己也练了练手, 博君一笑. 只在VC7.1下测试过, VC6也许可能可以迂回实现, 但是估计工作量太大. 1. 首先需要一个基本的 If 语句. template struct if_{ typed
C++ Templates 又发现一个诡秘的地方模板派生类(下面的D) 从一个 确定性基类(指B)继承, 在D的定义中, 编译器优先查找基类中的名字, 然后才是模板参数placeholder (即Type) .例如:struct B{ typedef int Type; //基类中有一个Type名字};templateclass D : public B //从非依赖基类B派生, {pu
C++ Templates 的一个例子 C++ Templates 中的一个例子:一个模板基类templateclass Base{public: int field; // #1};派生类, 从上面的模板基类继承注意, 在此, 基类并不能确定就是上面的Base, 因为 下面#3 处可以看到, 程序对Base进行了特化templateclass Derived : public Base{public: void f(