4

我在自己的代码中有一个命名空间核心,它与我正在使用的动态库的命名空间核心冲突。出现问题是因为我无法修改任何一个。第一个核心因为是我们团队项目的一部分,第二个因为是库的一部分。有没有办法解决这种情况?

4

3 回答 3

7

尝试将您的核心命名空间变成子命名空间。

编辑:清理答案并添加代码。(在手机上很难做到!)

这样您就可以访问每个“核心”命名空间。这也明确显示了所指的是哪个“核心”。即使外部库具有相同的函数名称,您也将是安全的。

但是,您提到您实际上无法更改原始代码中的任何内容,因此您唯一的选择是使用不同的库并希望它没有“核心”命名空间。在我看来,说服您的团队更改他们的代码可能要容易得多。

// Your 'core' namespace, inside your own namespace.
namespace Mygame
{
  namespace core
  {
    void Foo();
  }
}

// Access both namespaces safely.
Mygame::core::Foo();
core::Foo();
于 2012-07-14T03:14:57.910 回答
1

您将需要更改您有权访问的命名空间的名称。像这样的情况就是为什么给你创建的东西(类、库、命名空间......)一个前缀,将它们与可能使用相似名称的其他项目区分开来是个好主意。

例如,如果我有一个游戏经理,我不会只调用类Manager。我将其称为MygameGameManager或类似名称,以将其与其他类区分开来——即。如果有人稍后出现并添加SoundManager到项目中。重要的是要在命名约定中找到使事物清晰和独特与命名过于冗长之间的平衡。平衡就在那里,你只需要找到它!

于 2012-07-14T02:59:36.077 回答
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
}

现在链接器将看不到冲突,并且您的代码不会看到名称更改。


出现问题是因为我无法修改任何一个。

好吧,如果您无法修改任何内容,那么就没有解决方案。我在这个答案中做了一个假设,但也许你可以澄清什么样的改变是可以接受的?

于 2012-07-14T09:29:27.493 回答