您好我的代码中有以下结构:
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
,或将整个文件放入一些外部命名空间。
答案 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
。但总的来说,如果你有一个更复杂的层次结构,那么这种形式可能会让你获得一些可读性。