John Lakos 将此问题称为编译时耦合的潜在根源(他的简介中的图 0-3):
我面临的问题是编译了太多文件,因为对单个枚举存在物理依赖性。
我有一个带有枚举定义的标头:
// version.h
enum Version {
v1 = 1,
v2, v3, v4, v5, ... v100
};
Run Code Online (Sandbox Code Playgroud)
这被数百个文件使用。每个文件定义一类对象,必须使用该read()函数从磁盘读取这些对象。Version用于确定读取数据的方式。
每次引入新的类或类成员时,都会将新条目附加到枚举中
// typeA.cpp
#include "version.h"
void read (FILE *f, ObjectA *p, Version v)
{
read_float(f, &p->x);
read_float(f, &p->y);
if (v >= v100) {
read_float(f, &p->z); // after v100 ObjectA becomes a 3D
}
}
Run Code Online (Sandbox Code Playgroud)
和
// typeB.cpp
#include "version.h"
void read (FILE *f, ObjectB *p, Version v)
{
read_float (f, &p->mass);
if …Run Code Online (Sandbox Code Playgroud)