我正在使用STL开发一个小型的个人C ++项目。我不喜欢在我的头文件中遍布“std::
”,因为我发现它阻碍了可读性,但同时我不希望通过放置{{1在头文件中。
所以我想知道是否有办法限制using namespace std
声明的范围,以便它适用于我的头文件的内容,但不适用于包含它的文件。我尝试了各种各样的事情
using
但似乎在函数定义之外不允许以这种方式引入范围。有办法做我想要的事吗?
请注意:我真的不想讨论这是否是一个好主意,我只是想知道是否可以做到。
答案 0 :(得分:5)
是的,我认为可以做到。
为了实现这一点,您需要构建自己的命名空间。 我编写了一些按预期工作的代码。
头文件看起来像:
#include <iostream>
namespace my_space {
using namespace std;
void mprint ()
{
/*
* This is working. It means we can access
* std namespace inside my_space.
*/
cout << "AAA" << endl;
}
};
实施文件如下:
#include "my_header.h"
int main ()
{
/*
* Working Fine.
*/
my_space::mprint();
/*
* It gives a compile time error because
* it can't access the std namespace
*/
cout << "CHECK" << endl;
return 0;
}
如果这不符合您的要求,请告诉我。我们可以解决这个问题。
答案 1 :(得分:3)
不,它无法完成。您在标头中引入范围的尝试完全失败,因为没有标题范围 - 标头文件在编译期间没有特殊状态。翻译单元是在预处理器完成后获得的源文件。因此,所有include
指令只是扩展相应的头文件。这可以防止您以任何方式使头文件的内容特定于上下文。