繁体   English   中英

在不同命名空间中使用相同名称消除歧义(枚举、方法、class 或结构)

[英]Disambiguating (enum, method, class or struct) with same name in different namespaces

我在解决存在于不同名称空间中但名称相同的实体的歧义错误时遇到问题。

namespace A {void Name();}   // Assume this is expanded to have all the code necessary.
namespace A::B {int Name();} // Different method, same name.

namespace C 
{
  using namespace A;
  using namespace B;

  Name();  // error: reference to 'Name' is ambiguous
}

虽然我可以访问代码,但我需要找到侵入性最小的解决方案。 显而易见的解决方案是:

#define Name A::Name

在 C# 中,我可以using Name = A::Name; 但 C++ 仍然抱怨。

存在命名空间以确保不会发生此类名称冲突。 这就是工具的全部意义所在。 您有两个名为A::NameA::B::Name实体。 他们已经很明确了。

它们只会变得模棱两可,因为您试图避免使用它们的全名。 如果您只想在某个命名空间中将其命名为Name ,那么您将不得不选择您正在谈论Name

除非您愿意使用他们的全名,否则您只能using namespace 如果您using A::B::Name ,即使使用更细粒度using A::Name也无济于事。

基本上,停止尝试与命名空间作斗争,而只是使用它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM