c++ - 如何在一个代码库中支持具有不同命名空间的两个版本的第三方库

标签 c++ dll namespaces shared-libraries version

我有两个版本的第三方 C++ 库(lib.so 和头文件)
在一个版本中,所有的类/枚举/结构都在命名空间“A”中
在另一个版本中,它们位于命名空间“B”中
两个版本的 header 和 lib.so 名称相同
我怎样才能拥有相同的代码库,以便我可以支持两个版本。像这样的东西

if (myVersion == "1.0") {
    /* pick all the symbols from namespace "A"*/
} else {
    /* pick all the symbols from namespace "B"*/
}

最佳答案

您在代码中建议的是在运行时确定它,这在 C++ 中是不可能的。
如果您的版本是常量,您可以将其声明为宏并使用预处理器进行调节。
正如评论中所说,using namespace不建议使用,命名空间别名可以更好。

#if VERSION == 1000 //...
namespace My = A;
#else
namespace My = B;
#endif
//使用我的::...
但是,如果您坚持使用 using namespace ,
#define VERSION //your version

...

#if VERSION == 1000 //or something like that to mark 1.0.0.0
using namespace A;
#else
using namespace B;
#endif

关于c++ - 如何在一个代码库中支持具有不同命名空间的两个版本的第三方库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63513796/

相关文章:

c++ - 以下模板代码的奇怪行为

c++ - 类析构函数是否在作业中调用?

c# - Visual Studio 添加与 dll 同名的可执行文件

c# - 在 Python 中加载 DLL 文件和调用函数

c++ - boost::function 中的命名空间循环或代码泄漏?

PHP 导入类或命名空间?

c++ - std::basic_fstream::put() 无效

c++ - 我必须用着色器语言编写才能创建 FX 文件吗?

.net - 将 VC++ 静态库包装在 DLL 中以与 .Net 托管程序集一起使用

PHPUnit 在带有命名空间的 Netbeans 中失败