减少C++代码编译时间的简单方法(必看篇)

2020-01-06 16:40:16于海丽

3. 删除不必要的类之间的继承

面向对象提供了继承这种机制,但是继承不要滥用, old class 的继承就属于滥用之一, class old 继承file 和 db 类, 继承file是公有继承,继承db 是私有继承,继承file 可以理解, 因为file 中有虚函数, old 要重新定义它, 但是根据我们的假设, 只有file 和 cx 有虚函数,私有继承db 怎么解释?! 那么唯一可能的理由就是:

通过 私有继承—让某个类不能当作基类去派生其他类,类似Java里final关键字的功能,但是从实例看,显然没有这个用意, 所以这个私有继承完全不必要, 应该改用包含的方式去使用db类提供的功能, 这样就可以

把"db.h"头文件删除, 把db 的实例也可以放进impl类中,最终得到的类是这样的:


// 只用 file and cx 有虚函数.
   #include "file.h" 
   class cx;
   class error;
   class db;
   class old : public file {
   public:
     old( const cx& );
    db get_db( int, char* );
    cx  get_cx( int, cx );
    cx& fun1( db );
    error fun2( error );
    virtual std::ostream& print( std::ostream& ) const;
   private:
    class oldimpl* pimpl; //此处前向声明和定义
   };
    inline std::ostream& operator<<( std::ostream& os,const old& old_val )
    { return old_val.print(os); }
 
//implementation file old.cpp
class oldimpl{
std::list<cx> cx_list_;
deduce    dudece_d_;
};

小结一下:

这篇文章只是简单的介绍了减少编译时间的几个办法:

1. 删除不必要的#include,替代办法 使用前向声明 (forward declared )

2. 删除不必要的一大堆私有成员变量,转而使用 "impl" 方法

3. 删除不必要的类之间的继承

这几条希望对您有所帮助, 如果我哪里讲的不够清楚也可以参考附件,哪里有完整的实例,也欢迎您发表评论, 大家一起讨论进步,哦不,加薪。 呵呵,在下篇文章我将把impl实现方式再详细分析下,期待吧...

以上就是小编为大家带来的减少C++代码编译时间的简单方法(必看篇)全部内容了,希望大家多多支持ASPKU~

 
注:相关教程知识阅读请移步到C++教程频道。