如何处理不使用命名空间的库

How to deal with library not using namespaces

本文关键字:命名空间 何处理 处理      更新时间:2023-10-16

在我的项目中,我必须使用符号不在命名空间中的库。库的类具有相当短和通用的名称,例如 LoggerReader 。我还在项目自己的类中使用了其中一些名称。

考虑我的项目的符号也没有命名空间的情况。名称冲突可以通过将我的代码放在命名空间中并通过使用限定名称进行区分来解决(例如 ::LoggerMy::Logger),但我更希望库的符号也被命名。有什么方法可以将库的符号"强制"到我选择的命名空间中吗?

其次,如果我想使用两个不同的库,它们都定义了非命名空间Logger怎么办?在这种情况下,有什么方法可以避免命名空间冲突吗?

有什么方法可以将库的符号"强制"到我选择的命名空间中吗?

不,你真的不能那样做。我可以想象的一种方法是提供一个包装器API,该API实际上使用namespace并从不同的名称(如LoggerExt)转发。

如果我想使用两个不同的库,它们都定义了非命名空间Logger怎么办?

你迷路了,至少链接器会告诉你。

据我所知,您有 4 个选项:

  • 确保所有代码都在命名空间中。(这应该是给定的)
  • 联系指定库的开发人员,让他们知道它等待并希望更新版本。(适当的沟通和耐心)
  • 自己重写整个库,将其完全封装在命名空间中。(祝你好运,除非你知道你在做什么)
  • 找到一个新的、更好的库,它与你当前使用的库相当,它将提供你需要的所有功能,而且设计得很好。(涉及大量的研究,家庭作业和阅读,但最终可能会得到回报)