大佬教程收集整理的这篇文章主要介绍了c – 标题中的枚举导致过多的重新编译,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我面临的问题是编译了太多文件,因为单个枚举存在物理依赖性.
// version.h enum Version { v1 = 1,v2,v3,v4,v5,... v100 };
这被数百个文件使用.
每个文件定义一个对象类,必须从磁盘中读取,
使用read()函数.版本用于确定数据的读取方式.
// 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 } }
和
// typeB.cpp #include "version.h" void read (FILE *f,ObjectB *p,Version v) { read_float (f,&p->mass); if (v >= v30) { read_float (f,&p->veLocity); } if (v >= v50) { read_color (f,&p->color); } }
现在,正如您所看到的,一旦ObjectA发生变化,我们就必须向版本引入一个新条目(比如说v100).因此,所有类型* .cpp文件都将被编译,即使只有ObjectA的read()确实需要v100条目.
如何在对客户端(即类型* .cpp)代码进行最小更改的情况下反转对枚举的依赖性,以便只编译必要的.c文件?
这是一个可能的解决方案,我想到了,但我需要一个更好的解决方案:
我想我可以将枚举放在.cpp文件中,并使用各个枚举成员的值公开int:
//version.cpp enum eVersion { ev1 = 1,ev2,ev3,ev4,ev5,... ev100 }; const int v1 = ev1; const int v2 = ev2; .... const int v100 = ev100; // introduce a new global int for every new entry in the enum
以某种方式为版本类型创建别名
//version.h typedef const int version;
并且仅引入每次所需的const int值:
// typeA.cpp #include "version.h" extern Version v100; ///// *** will be resolved at link time void read (FILE *f,&p->z); // after v100 ObjectA becomes a 3D } }
但我认为这看起来非常糟糕,可以追溯到前标题时间
// ObjectA.cpp #include"ObjectA.h" // define ObjectA void ObjectA::setPar ( float xx,float yy,float zz) { x = v[0]; y = v[1]; z = v[2]; }
然后
// typeB.cpp #include"ObjectB.h" // define ObjectB void ObjectB::setPar ( float mm,float vv,color cC) { mass = mm; veLocity = vv; color = cc; }
// readObject.cpp #include"version.h" #include"ObjectA.h" #include"ObjectB.h" void read (FILE *f,Version v) { float x,y,z; read_float(f,X); read_float(f,y); if (v >= v100) { read_float(f,z); // after v100 ObjectA becomes a 3D } else z=0.0; // whatever p->setPar(x,z); } void read (FILE *f,Version v) { ... }
以上是大佬教程为你收集整理的c – 标题中的枚举导致过多的重新编译全部内容,希望文章能够帮你解决c – 标题中的枚举导致过多的重新编译所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。