我可以在标头中将一个命名空间"import"到另一个命名空间中吗?

Can I "import" one namespace into another in the header?

本文关键字:命名空间 import 一个 另一个 我可以      更新时间:2023-10-16

foo.h

namespace Foo
{
    namespace Inner
    {
        void func (int *);
    }
}

bar.h

#include <Foo.h>
namespace Bar
{
    namespace Inner
    {
        void func (float *);
    }
}

main.cpp

#include <Bar.h>
using namespace Bar;
int main ()
{
    int i;
    float f;
    Inner::func (&i);
    Inner::func (&f);
}

main中,float * func的过载无需Bar::名称空间限定符,但是int * Overload需要Foo::命名空间预选赛。

我知道我可以拥有

using namespace Foo::Inner;
using namespace Bar::Inner;
int main ()
{
    int i;
    float f;
    func (&i);
    func (&f);
}

i do 不想要这个,我想在每种情况下参考Inner::func

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

(。

我将其非正式地视为"导入" Foo::Inner中的Bar::Inner,因此问题标题。我真正的意思是:

我可以在Bar.h中添加一些东西,让我将Foo::Inner中的过载添加到Inner::stuff中,无论 using namespace Bar有效吗?

您可以使用Bar::Inner

放置
namespace Bar
{
    namespace Inner
    {
        using Foo::Inner::func;
        void func (float *);
    }
}

这样,可以用Bar::Inner::func

使用

namespace Inner {
  using namespace Foo::Inner;
  using namespace Bar::Inner;
}

main之前。请参阅此处的实时示例

写作

namespace Inner
{
    using namespace Foo::Inner;
    using namespace Bar::Inner;
}

main上方就这样做。如果您只想引入特定符号,请写using Foo::Inner::func&amp; c。