隐藏另一个名称空间

时间:2014-02-12 16:15:30

标签: c++ namespaces nested

我需要在另一个名称空间中使用一个名称空间,我不希望以这样的方式允许访问第一个名称空间

namespace One
{
    typedef int INT;
}

namespace Two
{
    using namespace One;
    #include "file.h"
    ...
}

int main(void)
{
    Two::INT i;
}

file.h

namespace One 
{
    INT k;
}

我无法更改file.h,这就是为什么我需要在内部使用二,我需要用户被迫使用这种表示法:

int main(void)
{
    Two::One::INT i;
}

这种表示法是强制性的,因为在file.hi中使用另一个pragma重新定义One中的类型,如果用户要求Two::type_nameTwo::One::type_name使用相同类型,则会得到具有不同内存布局的结构。

是的,Two::One::k必须是可访问的。

1 个答案:

答案 0 :(得分:0)

//可以嵌套命名空间,您可以在另一个名称空间中定义一个命名空间,如下所示:

namespace namespace_name1 {
   // code declarations
   namespace namespace_name2 {
      // code declarations
   }
}

//您可以使用结果运算符访问嵌套命名空间的成员,如下所示:

//访问namespace_name2的成员

using namespace namespace_name1::namespace_name2;

//访问命名空间的成员:name1

using namespace namespace_name1;

// http://www.tutorialspoint.com/cplusplus/cpp_namespaces.htm