我有两个版本的第三方 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/