我可以在标头中将一个命名空间“导入”到另一个命名空间吗?

spr*_*aff 4 c++ namespaces

Foo.h

namespace Foo
{
    namespace Inner
    {
        void func (int *);
    }
}
Run Code Online (Sandbox Code Playgroud)

巴赫

#include <Foo.h>

namespace Bar
{
    namespace Inner
    {
        void func (float *);
    }
}
Run Code Online (Sandbox Code Playgroud)

主程序

#include <Bar.h>

using namespace Bar;

int main ()
{
    int i;
    float f;

    Inner::func (&i);
    Inner::func (&f);
}
Run Code Online (Sandbox Code Playgroud)

main重载无需命名空间限定符即可使用,但重载需要命名float *空间限定符。funcBar::int *Foo::

我知道我可以

using namespace Foo::Inner;
using namespace Bar::Inner;

int main ()
{
    int i;
    float f;

    func (&i);
    func (&f);
}
Run Code Online (Sandbox Code Playgroud)

我不希望Inner::func这样,我想在每种情况下都这样引用。

我也不想添加using namespace Foo到每个.cpp包含的文件Bar.h(这是库重构工作的结果,将一些内容拉BarFoo,许多.cpp文件已经包含Bar.h)。

我将此非正式地视为“导入”Foo::InnerBar::Inner,因此是问题标题。我真正的意思是:

我可以添加一些内容,让我可以在任何有效的地方Bar.h引用重载吗?Foo::InnerInner::stuffusing namespace Bar

use*_*670 5

您可以将 using 放入Bar::Inner

namespace Bar
{
    namespace Inner
    {
        using Foo::Inner::func;
        void func (float *);
    }
}
Run Code Online (Sandbox Code Playgroud)

这样两个重载都可以用 来引用Bar::Inner::func


fra*_*sco 5

使用

namespace Inner {
  using namespace Foo::Inner;
  using namespace Bar::Inner;
}
Run Code Online (Sandbox Code Playgroud)

main请参阅此处的实例