限制头文件中“using namespace”的范围

时间:2014-07-04 02:13:12

标签: c++ namespaces scope

我正在使用STL开发一个小型的个人C ++项目。我不喜欢在我的头文件中遍布“std::”,因为我发现它阻碍了可读性,但同时我不希望通过放置{{1在头文件中。

所以我想知道是否有办法限制using namespace std声明的范围,以便它适用于我的头文件的内容,但适用于包含它的文件。我尝试了各种各样的事情

using

但似乎在函数定义之外不允许以这种方式引入范围。有办法做我想要的事吗?

请注意:我真的不想讨论这是否是一个好主意,我只是想知道是否可以做到。

2 个答案:

答案 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指令只是扩展相应的头文件。这可以防止您以任何方式使头文件的内容特定于上下文。