如何限制"using namespace ..."的范围? C++

How to limit the scope of a "using namespace ..."? c++

我有包含“我的命名空间”的 (myns::) 方法实现的文件,在函数之前有很多“myns::”。我想写使用命名空间,但它会在其他文件中可见。我不能在“using namespace mysp;”之前写“static”。

my_namespace_file.h:

namespace myns {
  void F1();
  void F2();
}

my_imp_file.h:

#include "my_namespace_file.h"

// problem is here
using namespace myns;

void F1() {}
void F2() {}

如果我在这里使用“using namespace myns;”并在其他文件中包含 my_imp_file.h 我不会在此文件中使用“myns::”

niceheadername.h:

namespace myns{
  extern void coolFunctionName(); // I exist!
}

nicecppfilename.cpp:

#include "niceheadername.h" // I exist in "niceheadername.h"
void myns::coolFunctionName(){ // this is what I contain!
  //put content here
}

然后,在您编写的所有其他文件中 #include "niceheadername.h" 告诉编译器在哪里可以找到这些函数。

就这么简单:

#include "my_namespace_file.h"

namespace myns {

void A::F1() {} // class name must be repeated, because you cannot open namespace of the class
void A::F2() {}

}

因为你不应该 #include 带有实现的文件,你也可以使用 using namespace myns;,但是如果你要创建另一个 class A不同的命名空间。最好只正确使用命名空间。