将`using`指令限制为当前文件

mis*_*tor 5 c++ using-directives

很抱歉这个愚蠢的问题,但有没有办法将using指令限制在当前文件中,以便它们不会传播到#include这个文件的文件?

小智 15

不,没有,这就是为什么你不应该在头文件中使用using指令,或者你在#include中使用任何其他文件.

  • 为了扩展这一点 - 预编译器(处理`#include`和其他`#`-commands)在编译器看到代码之前运行.编辑器处理`using`指令和任何其他标准关键字.因此,就编译器而言,头文件实际上并不是单独的文件 - 它们是恰好位于每个文件中的代码,它们是"#include",所以任何"使用"都是如此.你可能会在其中加入指令. (3认同)
  • 啊......伤心.无论如何,谢谢你的回答. (2认同)

Nic*_*kis 4

也许将要包含在其自己的名称空间内的代码包装起来可以实现
您想要的行为,因为名称空间具有范围影响。

// FILENAME is the file to be included
namespace FILENAME_NS {
   using namespace std;
   namespace INNER_NS {
      [wrapped code]
   }
}
using namespace FILENAME_NS::INNER_NS;
Run Code Online (Sandbox Code Playgroud)

以及其他一些文件中

#include <FILENAME>
// std namespace is not visible, only INNER_NS definitions and declarations
...
Run Code Online (Sandbox Code Playgroud)