命名与多个命名空间冲突
Naming conflict with multiple namespaces?
我习惯了Java/C#处理包的方式。尽管我的大部分工作都是用C++完成的,但我已经有一段时间没有使用名称空间了。
我知道我可以有多个名称空间,例如:
namespace A
{
class Foo;
}
namespace B
{
namespace C
{
class Bar;
}
}
结果很好。我想了解的是以下场景:
namespace A
{
class Foo;
}
namespace B
{
namespace A
{
class Bar : public A:Foo //here A shows up as namespace B::A
{
};
}
}
在Java中,如果我要编写一个包装器,我会这样做。假设我试图将阿尔忒弥斯框架移植到我的引擎中。如果我需要编写一个完整的包装器,它的名称将类似于MyEngine.Artemis
包名称。
在C++中,这可能吗?更重要的是,这是处理这类任务的合适方式吗?
当在像您这样的上下文中使用非限定名称时,名称查找将首先检查最内部的封闭范围,然后再检查外部的封闭范围。特别是,在命名空间B
中声明的任何名称都会在全局命名空间中声明的名称之前被考虑
因此,名称空间B::A
首先在::A
之前找到,并且显然在B::A
中没有成员Foo
。请注意,在代码中有两个不同的名称空间可以用A
来寻址,但在没有进一步限定的情况下只能找到一个。
因此写入
namespace B
{
namespace A
{
class Bar : public ::A::Foo
{
};
}
}
相关文章:
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- C++ |匿名命名空间与命名空间 std 冲突
- 分解SWIG Python接口 - 容器会产生命名空间冲突
- 如何解决两个不使用命名空间的第三方库之间的类名冲突?
- 调用 ADL 时,表达式和命名空间之间是否会发生冲突
- 类名和枚举值之间的冲突:无需命名空间即可解析
- C++当命名空间、类名和命名空间::类名冲突时该怎么办
- C++ 中的命名空间冲突
- 避免与具有相同名称的两个类发生命名空间冲突
- 命名与多个命名空间冲突
- 命名空间中的类名冲突
- ctime std::命名空间冲突
- 如何避免 C 和 C++ 中的命名空间冲突
- C++ 当命名空间发生冲突时,为什么结构/类不与变量和函数发生冲突?
- 我收到void main()和使用命名空间std;之间的冲突;?我正在使用代码块
- 全局作用域枚举和命名空间冲突
- 如何解决c++中的命名空间冲突?
- 不明确的引用和命名空间(来自两个外部库的定义冲突)
- 命名空间,类成员ADL冲突
- 在c++中命名命名空间的最佳方法//当名称冲突时该怎么做