减少文件之间的编译依赖

来源:互联网 发布:travel域名 编辑:程序博客网 时间:2024/05/19 21:15
        C++开发中,如果不注意,随便修改一个头文件中的定义,会导致很多引用(indlude)到该头文件的文件重新编译,觉得很浪费时间,所以要尽量减少文件之间的编译依赖。

        除了标准库,尽量不要在头文件中直接包含要使用的类的头文件,虽然直接包含头文件对于客户端程序员有方便之处(包含了你的头文件就可以直接使用依赖的东西),但对于大项目,会耗费大量的编译时间,不可取。

        使用预先声明(forward declaration)的难点是必须让编译器在编译期间知道它的对象的大小,如果在你的头文件中定义的类成员变量是一个自定义类,最好使用指针来隐藏类细节,这样编译器知道指针的大小。

        class Addr; //forward declaration instead of directly include "Addr.h"
        class Customer
        {
        public:
                   Customer();
        private:
                   Addr* myAddr;   //use pointer instead of directly Addr
                   Date* myLastModified;
        };

        用对类声明的依赖替代对类定义的依赖是减少编译依赖的原则。你声明一个使用一个类的函数时绝对不需要有这个类的定义,即使这个函数通过传值方式传递或返回这个类。

        class Date; // class declaration
        Date today(); // fine - no definition
        void setLastModified(Date d); //fine

        还有一种方法是使用指向实现的指针,即在你的主类(Customer)定义中只定义接口,私有成员封装在一个实现类(CustomerImpl)中,主类中使用一个指向实现类的成员指针变量,虽然这样真正实现了接口和实现的分离,使得Customer与Date和Addr脱离,但个人不喜欢这样,大项目中文件数成倍增加。

       使用接口(Interface)和工厂方法(factory)是一个较好的方式。就是你只依赖接口头文件,对于具体的实现类,你无须注意。

      更详细的论述见: http://develop.csai.cn/c/200604060902171527.htm
原创粉丝点击