如何处理不使用命名空间的库
How to deal with library not using namespaces
在我的项目中,我必须使用符号不在命名空间中的库。库的类具有相当短和通用的名称,例如 Logger
和 Reader
。我还在项目自己的类中使用了其中一些名称。
考虑我的项目的符号也没有命名空间的情况。名称冲突可以通过将我的代码放在命名空间中并通过使用限定名称进行区分来解决(例如 ::Logger
和My::Logger
),但我更希望库的符号也被命名。有什么方法可以将库的符号"强制"到我选择的命名空间中吗?
其次,如果我想使用两个不同的库,它们都定义了非命名空间Logger
怎么办?在这种情况下,有什么方法可以避免命名空间冲突吗?
有什么方法可以将库的符号"强制"到我选择的命名空间中吗?
不,你真的不能那样做。我可以想象的一种方法是提供一个包装器API,该API实际上使用namespace
并从不同的名称(如LoggerExt
)转发。
如果我想使用两个不同的库,它们都定义了非命名空间
Logger
怎么办?
你迷路了,至少链接器会告诉你。
据我所知,您有 4 个选项:
- 确保所有代码都在命名空间中。(这应该是给定的)
- 联系指定库的开发人员,让他们知道它等待并希望更新版本。(适当的沟通和耐心)
- 自己重写整个库,将其完全封装在命名空间中。(祝你好运,除非你知道你在做什么)
- 找到一个新的、更好的库,它与你当前使用的库相当,它将提供你需要的所有功能,而且设计得很好。(涉及大量的研究,家庭作业和阅读,但最终可能会得到回报)
相关文章:
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- CUDA内核和数学函数的显式命名空间
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 类是C++中的命名空间吗
- 在命名空间中使用全局命名空间中的函数
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- '使用命名空间{嵌套在另一个命名空间中的某个命名空间}"
- 如何处理警告 C4177:#pragma 'float_control' 只能在全局范围或命名空间范围内使用
- 如何处理正向声明中的命名空间
- 如何处理不使用命名空间的库
- 为什么我们在Qt中处理表单时要为ui对象声明一个命名空间?
- 如何处理不断变化的c++ std::命名空间?例如:std::tr1::shared_ptr vs. std::shar
- 如何在c++中处理命名空间
- C++如何在可移植代码中处理tr1和非tr1命名空间