我正在將專有文件格式的文件轉換代碼寫入一個更通用的代碼。我的目標是支持製造商文件格式的多個版本。如何包含同一頭文件的兩個不同版本?
我有相同的專有標題的多個版本。頭文件定義了包含主文件頭文件的各種結構體(該文件只是一個大頭文件,後面是原始數據)。
我需要讀取源文件的前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