我有两个库(第三方),在每个库中,他们定义了两个具有相同名称的类(在头文件中)。
// Lib A, HeaderA.h
struct mycompare
{
//Some code
};
// Lib B, HeaderB.h
struct mycompare
{
//Same code
};
请注意,在两个库中,mycompare名称和实现相同。如何同时使用两个头文件?
答案 0 :(得分:5)
假设您无法编辑标题/库:
#define mycompare mycompare_duplicate
,然后是#undef mycompare
。如果其中一个实现稍后更改,这可能会让您感到困惑,如果标头稍后使用符号本身(例如,作为函数参数,其中类型名称 - 修改将不同并阻止您的调用被解析)可能无法实现。如果你可以编辑库,那么显然最好的长期选择是将它们的功能放在不同的命名空间中。
答案 1 :(得分:1)
快速解决方法是将它们简单地包装在命名空间中。这可能很简单,具体取决于标头的复杂程度。或者,考虑用这个特定的结构编写自己的标题(如果你知道它将保持不变)并在传递给每个结构时进行转换。
那就是说,这种情况非常不典型。你确定库B不依赖于A,反之亦然吗?在这种情况下,唯一可能被破坏的是#define USE_EXTERNAL_A
左右。一个典型的例子是包含zlib的库,除非你为它们提供一个。
答案 2 :(得分:1)
只需制作第三个标题,在其中移动冗余定义(仅一次);然后将此标题包含在原件中。它应该工作。