gpt4 book ai didi

c++ - 与多个命名空间的命名冲突?

转载 作者:搜寻专家 更新时间:2023-10-31 00:33:30 24 4
gpt4 key购买 nike

我习惯了 Java/C# 处理包的方式。尽管我的大部分工作都是用 C++ 完成的,但我已经有一段时间远离命名空间了。

我知道我可以有多个 namespace :

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 中,这就是我编写包装器时会做的事情。假设我正在尝试将 Artemis 框架移植到我的引擎中。如果我需要编写一个完整的包装器,它将按照 MyEngine.Artemis 包名的方式命名。

在 C++ 中,这可能吗?更重要的是,这是处理此类任务的合适方法吗?

最佳答案

当在像您这样的上下文中使用非限定名称时,名称查找将在检查外部范围之前开始检查最内层的封闭范围。特别是,在命名空间 B 中声明的任何名称在全局命名空间中声明的任何名称之前被考虑。
因此首先找到命名空间B::A,在::A 之前 - 显然Foo 中没有成员B::A。请注意,有两个不同的命名空间可以在您的代码中使用 A 进行寻址,但只有一个可以在没有进一步限定的情况下找到。

因此写

namespace B
{
namespace A
{
class Bar : public ::A::Foo
{
};
}
}

关于c++ - 与多个命名空间的命名冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28416742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com