我有兩個庫(第三方),並在每個這些庫中定義了兩個具有相同名稱的類(在頭文件中)。如何避免使用多個外部庫時的「重新定義」?
// Lib A, HeaderA.h
struct mycompare
{
//Some code
};
// Lib B, HeaderB.h
struct mycompare
{
//Same code
};
請注意,在這兩個庫,mycompare名稱和實現相同。如何同時使用兩個頭文件?
我有兩個庫(第三方),並在每個這些庫中定義了兩個具有相同名稱的類(在頭文件中)。如何避免使用多個外部庫時的「重新定義」?
// Lib A, HeaderA.h
struct mycompare
{
//Some code
};
// Lib B, HeaderB.h
struct mycompare
{
//Same code
};
請注意,在這兩個庫,mycompare名稱和實現相同。如何同時使用兩個頭文件?
假設你不能編輯頁眉/庫:
#define mycompare mycompare_duplicate
包括HeaderB.h,然後#undef mycompare
之前。如果其中一個實現稍後發生變化,這可能會讓你感到痛苦,如果頭稍後使用該符號本身(例如,作爲函數參數,其中類型名稱mangling會有所不同並且阻止您的調用被解析),則可能無法實現。如果您可以編輯這些庫,那麼顯然最好的長期選擇是將它們的功能放入不同的名稱空間中。
一個快速的解決方法是簡單地將它們包裝在名稱空間中。這可能很簡單,取決於標題的複雜程度。或者,考慮使用這個特定的結構編寫自己的頭文件(如果你知道它將保持不變),並在傳遞給每個結構時進行強制轉換。
也就是說,這種情況非常不典型。你確定圖書館B不依賴於A,反之亦然?在這種情況下,唯一可能被破壞的是一些#define USE_EXTERNAL_A
左右。一個典型的例子是包含zlib的庫,除非您提供它們。
只需製作第三個標題,移動冗餘定義(僅限一次);然後將此標題包含在原件中。它應該工作。
庫實際上並不相關。 :) – Morpheus 2011-04-25 06:48:40