我的项目使用了两个第三方开源库,这两个库都定义了 type BDD,并且都不使用命名空间。
有没有办法解决名称冲突?也许强制一个库进入自定义命名空间?
附加信息:第一个库仅用作BDD类型别名 ( typedef int BDD),因此它不会调用 上的任何方法BDD。
由于您的一个库仅用作BDD别名int(我假设该库称为lib1,另一个库称为lib2),因此您可以通过告诉预处理器在包含该库之前重命名它来更改此别名的名称,如下所示:
#define BDD BDD_lib1
#include <lib1>
#undef BDD
#include <lib2>
如果您需要在代码中使用该名称BDD,lib1则可以使用BDD_lib1(或者int如果您不担心其类型在未来版本中发生变化,则可以直接使用lib1)引用它。
但是,我认为这种方法只是一种解决方法,而不是真正的解决方案,因此您可能需要考虑按照 @YSC 在他的答案中建议的方式进行操作并提供补丁,以便其他尝试使用这些库的人不会遇到同样的问题。
如果BDD不仅仅是一个简单的类型别名,而是一个单独的类,则可能会由于 C++ 的名称修改而遇到麻烦,因此只有当名称BDD在任何出现名称修改的情况下都不重要时,此方法才有效。这或多或少地施加了以下限制:
BDD不得有任何非内联方法BDD(例如,A<BDD>类模板的特化template <typename> class A;是依赖于“BDD”的类型)不得具有任何非内联方法BDD必须是内联的,或者具有 C 链接| 归档时间: | 
 | 
| 查看次数: | 1168 次 | 
| 最近记录: |