我在自己的代码中有一个命名空间 core ,它与我正在使用的动态库的命名空间 core 冲突。问题出现是因为我无法修改其中任何一个。第一个核心因为是我们团队项目的一部分,第二个因为是库的一部分。有没有办法解决这种情况?
答案 0 :(得分:6)
尝试将核心命名空间转换为子命名空间。
编辑:清理答案并添加代码。 (在手机上很难做到!)
通过这种方式,您可以访问每个“核心”命名空间。这也明确地显示了被引用的“核心”。即使外部库具有相同的功能名称,也是安全的。
但是,您提到您实际上无法更改原始代码中的任何内容,因此您唯一的选择是使用不同的库并希望它没有“核心”命名空间。在我看来,说服你的团队改变他们的代码可能会更容易。
// Your 'core' namespace, inside your own namespace.
namespace Mygame
{
namespace core
{
void Foo();
}
}
// Access both namespaces safely.
Mygame::core::Foo();
core::Foo();
答案 1 :(得分:1)
您将需要更改您有权访问的命名空间的名称。这样的情况是为什么给你创建的东西(类,库,命名空间......)一个好主意,这个前缀可以将它们与可能使用类似名称的其他项区分开来。
例如,如果我有游戏经理,我不会只调用班级Manager
。我将其称为MygameGameManager
或类似的东西,以区别于其他类 - 即。如果有人稍后出现并在项目中添加SoundManager
。重要的是在命名约定中找到平衡,使事物清晰明确,并在命名中过于冗长。余额在那里,你只需要找到它!
答案 2 :(得分:1)
更改
namespace core {
// define namespace members
}
到
namespace myproject_core {} // namespace "declaration"
using namespace core = myproject_core; // "namespace alias"
// core:: refers only to your code now
namespace myproject_core {
// define namespace members
}
现在链接器将看不到任何冲突,并且您的代码将看不到名称更改。
问题出现是因为我无法修改其中任何一个。
好吧,如果你不能修改任何东西那么就没有解决方案。我在这个答案中做了一个假设,但也许你可以澄清哪种变化是可以接受的?