我有两个库(第三方),在这些库中的每一个中,他们都定义了两个具有相同名称的类(在头文件中)。

// Lib A, HeaderA.h
struct mycompare
{
//Some code
};

// Lib B, HeaderB.h
struct mycompare
{
//Same code
};

请注意,在两个库中, mycompare 名称和实现都是 相同的 。如何同时使用两个头文件?

最佳答案

假设您无法编辑标题/库:

  • 间接:为较简单的 A 和 B 创建您自己的外部包装器,其中仅在实现中包含 HeaderA.h 或 HeaderB.h。
  • 这与 Als 的选项 2 类似,但工作和耦合要少得多;-)
  • 无耻的黑客:包括 HeaderA.h,然后是 #define mycompare mycompare_duplicate,然后是 HeaderB.h,然后是 #undef mycompare。如果稍后的实现之一发生变化,这可能会咬你,如果 header 稍后使用符号本身(例如,作为函数参数,其中类型名称修改会不同并阻止你的调用被解析),这可能会咬你。

  • 如果您可以编辑库,那么显然最好的长期选择是将它们的功能放入单独的命名空间中。

    关于c++ - 使用多个外部库时如何避免 "redefinitions"?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5775920/

    10-10 12:42