是否有" .."对于c ++命名空间?

时间:2014-05-22 08:45:27

标签: c++ namespaces

您好我的代码中有以下结构:

namespace ns
{
class A
{
  public:
    class Impl
    {
        public: static int x;
    };
    class B
    {
      public:
        class Impl
        {
          public:
            Impl(){printf("%d", ns::A::Impl::x);}
        };
    };
};
}

有没有办法使用亲属而不是绝对路径访问该x属性?

这样会更方便,因为有一天我可以将命名空间名称从ns更改为other,或将整个文件放入一些外部命名空间。

2 个答案:

答案 0 :(得分:4)

  

有没有办法使用亲属而不是绝对路径访问该x属性?

封闭范围/命名空间中的符号可在当前范围/命名空间中访问。

ns::A::Impl::x可以缩短为A::Impl::x(不能省略A::因为您有两个Impl)。

答案 1 :(得分:2)

没有等效的“..”,即指定“封闭的命名空间/类”的方法,但你可以手动实现类似的东西:

class B
{
    typedef A parent;          // <---- add this

// ...

    printf("%d", parent::Impl::x);

在这种特殊情况下,它没有任何收获:这只是一种更为迂回的方式,如Maxim所建议的那样A::Impl::x。但总的来说,如果你有一个更复杂的层次结构,那么这种形式可能会让你获得一些可读性。