【发布时间】:2013-07-08 10:55:55
【问题描述】:
我正在编写从专有文件格式到更通用的文件转换代码。我的目标是支持制造商文件格式的多个版本。
我有多个版本的相同专有标头。标头定义了构成主文件标头的各种结构(文件只是一个大标头,后跟原始数据)。
我需要读取源文件的前 4 个字节以确定文件版本。反过来,文件版本告诉我使用哪个版本的 C 结构创建文件。
问题是:
- 我无法修改专有标头
- 标头不使用命名空间或类
- 头文件中定义了很多宏
可能的解决方案:
- 为每种文件版本类型构建不同的转换器二进制文件:-(
- 给用户和开发者带来不便
- 为每个版本动态加载库
- 转换器是面向插件的,所以已经有很多这样的事情发生了
我尝试过使用命名空间进行黑客攻击:
namespace version1 {
#include "version1.h"
}
namespace version2 {
#include "version2.h"
}
int main (void) {
version1::header *hdr = new version1::header;
return 0;
}
但这不会起作用,因为包含保护,并且每个标头中都重新定义了多个宏。
有没有优雅的方法来处理这个问题?
【问题讨论】:
-
标题——
C怎么样?您是否只使用标题,没有库或支持它们的.c或.cpp文件?您说您不能修改标头:您可以将标头作为输入并代码生成要编译的衍生产品吗? -
它们是纯 C 头文件。甚至没有任何函数声明,只有 C 结构。
-
@MatsPetersson 可能有一个合理的方法。
标签: c++ header include version conflict