现在的位置: 首页 > 综合 > 正文

如何减少C++程序的重复编译?

2014年02月09日 ⁄ 综合 ⁄ 共 923字 ⁄ 字号 评论关闭

         大多数面向对象程序设计都提倡封装:我们应该隐藏实现细节的类,尽可能减少对象之间的耦合。但在C ++(包括其他编译语言),我们还需要关心其他方面的设计。如何才能做到这一点呢?

     一个普通类的例子:

#include "Engine.h"
#include "Gearbox.h"
#include "..."
#include "Wheels.h"

class Car
{
private:
    Engine m_engine;
    Gearbox m_gearbox;
    Wheels m_wheels;
public:
    Car() { }
    virtual ~Car() { }
    void drive() { }
private:
    void checkInternals();
}

假设它的逻辑设计是不错的,那该类相关的物理设计方面的问题是什么?

第一:如果我们在Engine类中添加一个方法吗?不仅Car.cpp将必须重新编译(当然这是预期),调用Car的客户端也要重新编译。

第二:如果我们对Car类的Private域添加或修改方法,这样,客户端也必须重新编译。

对于小项目来说重新编译是可以的,但是对于大项目,编译的时间将会很长。对于使用Car的客户类真的要重新编译吗?可以使用下面的方法来避免编译:

class Engine;
class Gearbox;
class Wheels;

class Car
{
private:
    std::unique_ptr<Engine> m_engine;
    std::unique_ptr<Gearbox> m_gearbox;
    std::unique_ptr<Wheels> m_wheels;
public:
    Car();
    virtual ~Car();

    void drive();
private:
    void checkInternals();
}

或者

class Car
{
private:
    std::unique_ptr<class CarImpl> m_pImpl;
public:
    Car();
    virtual ~Car();

    void drive();

    // private methods 'moved' to source file...
}

 

推荐书籍《Large-Scale
C++ Software Design, by John Lakos

抱歉!评论已关闭.