我正在将专有文件格式的文件转换代码写入一个更通用的代码。我的目标是支持制造商文件格式的多个版本。如何包含同一头文件的两个不同版本?
我有相同的专有标题的多个版本。头文件定义了包含主文件头文件的各种结构体(该文件只是一个大头文件,后面是原始数据)。
我需要读取源文件的前4个字节来确定文件版本。文件版本反过来告诉我哪个版本的C-structs被用来创建文件。
的问题是:
- 我不能修改专有头
- 的头不使用命名空间或类
- 有在头文件中定义宏的好几个
可能的解决方案:
- 建立每个文件的版型不同的转换器的二进制文件:-(
- 不方便的用户和开发者
- 每个版本动态加载库
- 该转换器是插件为导向,所以已经是一个很多这样的情况
我曾尝试与命名空间黑客:
namespace version1 {
#include "version1.h"
}
namespace version2 {
#include "version2.h"
}
int main (void) {
version1::header *hdr = new version1::header;
return 0;
}
但是这不会因为包含警卫而起作用,并且因为在每个头文件中重新定义了多个宏。
有没有一种优雅的方式来处理这个问题?
标题 - 它们是如何“C”?你只使用头文件,没有库或支持它们的'.c'或'.cpp'文件?你说你不能修改头文件:你可以把头文件作为输入,代码生成衍生物来编译? – Yakk
它们是纯粹的C头文件。甚至没有任何函数声明,只是C结构。 – joe
@MatsPetersson可能有一个合理的方法。 – Yakk