C++ 显式声明全局命名空间

C++ 显式声明全局命名空间,c++,C++,是否可以从另一个命名空间中声明全局命名空间中的变量或函数?目前我的代码是这样的 namespace test { //do stuff } //declare global stuff namespace test{ //continue stuff } 出现这个问题的原因是因为我在名称空间中使用了#include,但所包含的部分代码需要在全局名称空间中。因此,我不能在名称空间块之外中断或编写代码 因此,我想: namespace {// do stuff //declare global

是否可以从另一个命名空间中声明全局命名空间中的变量或函数?目前我的代码是这样的

namespace test {
//do stuff
}

//declare global stuff

namespace test{
//continue stuff
}
出现这个问题的原因是因为我在名称空间中使用了
#include
,但所包含的部分代码需要在全局名称空间中。因此,我不能在名称空间块之外中断或编写代码

因此,我想:

namespace {// do stuff
//declare global stuff
//do more stuff
}
namespace {// do stuff
//declare global stuff
//do more stuff
}
现在我的代码看起来有点像:

namespace test{
void majorfcn1();
Void majorfcn2();
#include "minorfunctions.h"
}

如果它只是有功能的话,那就没问题了。但在我的例子中,我在其中加入了一些其他的包含,当然应该在全局空间中。因此,我不希望将它们删掉,而是希望我可以将它们保留在那里,并用
名称空间全局{}
或其他东西围绕它们。

答案是否定的。我建议您不要从名称空间中包含
。这不是传统的C++编码实践。
你说过你想:

namespace {// do stuff
//declare global stuff
//do more stuff
}
namespace {// do stuff
//declare global stuff
//do more stuff
}
然后你可以做:

namespace {// do stuff
}

//declare global stuff

namespace {// do stuff
//do more stuff
}

一般来说,不要在命名空间中包含
——这会完全破坏标头内容的抽象(您需要知道它如何声明所有内容以及声明了什么,以便安全地将包含在命名空间中)。我觉得您的第一个代码段很好。因为我想保持类接口干净,所以我将帮助函数放在一个单独的文件中并包含它们。@Quentin是的,但如果我将代码插入包含的命名空间块中,则这不是一个选项。在文件中没有任何东西表明它在主模块的名称空间中。@jiggunjer哦,我不明白。嗯,这很棘手,恐怕没有真正的解决办法。谢谢。如果可能的话,我可以使用预处理器来创建一个干净的界面,并保持包含我的include文件。现在,我需要两个包含文件,或者一个放在一个丑陋的地方…我编辑了我的答案,试图展示如何在不预处理魔法的情况下做到这一点。这回答了你的问题吗?