与多个命名空间的命名冲突?
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中,如果我要写一个包装器,这就是我会做的。假设我正在尝试将 Artemis 框架移植到我的引擎中。如果我需要写一个完整的包装器,它会被命名为 MyEngine.Artemis
包名。
在 C++ 中,这可能吗?更重要的是,这是处理此类任务的合适方法吗?
在像您这样的上下文中使用非限定名称时,名称查找将先检查最里面的封闭范围,然后再检查外部范围。特别是,在命名空间 B
中声明的任何名称在全局命名空间中声明的任何名称之前被考虑。
因此首先找到命名空间 B::A
,在 ::A
之前 - 显然 B::A
中没有成员 Foo
。请注意,有两个不同的名称空间可以在您的代码中使用 A
进行寻址,但只有一个可以在没有进一步限定的情况下找到。
因此写成
namespace B
{
namespace A
{
class Bar : public ::A::Foo
{
};
}
}
我习惯了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中,如果我要写一个包装器,这就是我会做的。假设我正在尝试将 Artemis 框架移植到我的引擎中。如果我需要写一个完整的包装器,它会被命名为 MyEngine.Artemis
包名。
在 C++ 中,这可能吗?更重要的是,这是处理此类任务的合适方法吗?
在像您这样的上下文中使用非限定名称时,名称查找将先检查最里面的封闭范围,然后再检查外部范围。特别是,在命名空间 B
中声明的任何名称在全局命名空间中声明的任何名称之前被考虑。
因此首先找到命名空间 B::A
,在 ::A
之前 - 显然 B::A
中没有成员 Foo
。请注意,有两个不同的名称空间可以在您的代码中使用 A
进行寻址,但只有一个可以在没有进一步限定的情况下找到。
因此写成
namespace B
{
namespace A
{
class Bar : public ::A::Foo
{
};
}
}