非常抱歉问这个愚蠢的问题,但是否有办法限制using
指令仅适用于当前文件,以便它们不会传播到包含此文件的文件中?
非常抱歉问这个愚蠢的问题,但是否有办法限制using
指令仅适用于当前文件,以便它们不会传播到包含此文件的文件中?
#include
和其他 #
命令)在编译器看到代码之前运行。using
指令和其他标准关键字由编译器处理。因此,就编译器而言,头文件实际上并不是独立的文件 - 它们只是出现在每个包含它们的文件中的代码,因此其中任何你可能添加的 using
指令也是如此。 - Amberusing
指令。 - anon// 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
...
从技术上讲,您应该能够将它们导入到一些内部名称空间中,然后使在该名称空间中声明的内容在用户所使用的名称空间中可见。
#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';
}
我不确定这是否值得麻烦,以及它与“参数依赖查找”有多好的兼容性。
using
指令。 - David Rodríguez - dribeasstd::map<std::string, std::tr1::tuple<int, std::string> >
,我宁愿打map<string, tuple<int, string> >
。 - missingfaktor