c ++命名空间是否有类似".."?

Is there analog of ".." for c++ namespaces?

本文关键字:命名空间 是否      更新时间:2023-10-16

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

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,或者将整个文件放入某个外部名称空间

是否有一种方法可以访问x属性,使用相对路径,而不是绝对路径?

封闭作用域/命名空间中的符号可以在当前作用域/命名空间中访问。

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

没有与".."等价的,即指定"封闭的命名空间/类"的方法,但您可以手动实现类似的事情:

class B
{
    typedef A parent;          // <---- add this
// ...
    printf("%d", parent::Impl::x);

在这种特殊情况下,它没有获得任何东西:这只是Maxim建议的A::Impl::x的一种更迂回的方式。但一般来说,如果你有一个更复杂的层次结构,那么这个表单可能会给你带来一些可读性。