我正在编写文件转换代码,将专有文件格式转换为更通用的格式。我的目标是支持制造商文件格式的多个版本。
我有多个相同专有头文件的版本。这些头文件定义了构成主文件头的各种结构体(文件只是一个由原始数据跟随的大型头文件)。
我需要读取源文件的前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
或.cpp
文件吗?你说你不能修改这些头文件:那么你能否将这些头文件作为输入,生成派生代码进行编译? - Yakk - Adam Nevraumont