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

时间:2010-04-05 08:44:44

标签: c++ using-directives

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

3 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分: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;

和其他一些文件

#include <FILENAME>
// std namespace is not visible, only INNER_NS definitions and declarations
...

答案 2 :(得分:4)

从技术上讲,你应该能够将它们导入到某个内部命名空间,然后在命名空间中为用户声明这些内容。

#ifndef HEADER_HPP
#define HEADER_HPP

#include <string>

namespace my_detail
{
    using std::string;
    inline string concatenate(const string& a, const string& b) { return a + b; }   
}

namespace my_namespace
{
    using my_detail::concatenate;
}

#endif

#include <iostream>
#include "header.hpp"

using namespace my_namespace;

int main() 
{
    std::  //required
    string a("Hello "), b("world!");
    std::cout << concatenate(a, b) << '\n';
}

不确定是否值得麻烦以及它与“依赖于参数的查找”的效果如何。