C++编程中,用户经常会自定义类型,如enum、struct等。一般地,这些自定义类型都放在头文件中定义,以便传递给其他类使用(#include该头文件即可)。如果是功能相关的类,直接包含该头文件即可使用这个自定义类型,如果不是功能相关的类,仅仅为了使用该自定义类型而包含这个头文件,会增加代码(类)的耦合性。
如果不想增加代码的耦合性,又想跨功能模块使用某个自定义类型,一般的做法是,新建一个单独的头文件,将自定义类型放在其中,然后其他类包含这个“自定义类型”公共头文件。但这样做也有缺点:一是如果把所有“自定义类型”全放在这个头文件中,会显得功能分类不清晰;二是如果按功能划分多个“自定义类型”公共头文件,会增加很多头文件,导致代码臃肿,特别某些功能仅有一个自定义类型时,单独新建一个头文件,显得突兀;三是如果某个类是一个功能比较独立的类,且需要跨不同工程进行复用(SVN映射的形式),为了保证它的独立性,应尽量少包含自定义头文件;四是跨编译包使用某个自定义类型,包含“自定义类型”公共头文件的做法会更麻烦。
有没有好一点的办法?近日,我遇到了这么一个问题,并想到了一个解决办法——预编译宏,貌似很多开发框架中也应用了这个技术,如MFC。