如何在声明命名空间时引用当前命名空间?是否有类似于“self”/“this”的关键字?

22

如果我重命名名称空间,我必须记住查看其余代码并进行所有必要的更改。是否有类似于selfthiscurrent用于引用当前命名空间的单词?

namespace myNamespace {
  int myInt;
  void myFunc() {
    myNamespace::myInt = 66;
  }
};
3个回答

30

为什么要引用当前的命名空间?其实这是没有必要的,你可以很容易地写成:

namespace myNamespace {
  int myInt = 33;
  void myFunc() {
    myInt = 33;
  }
};
无论声明了哪些变量(例如全局变量myInt),这个作用域中的变量将被默认使用。但是如果您想要更改名称,可以使用IDE技术,比如替换或重构。

无论声明了哪些变量(例如全局变量myInt),这个作用域中的变量将被默认使用。但是如果您想要更改名称,可以使用IDE技术,比如替换或重构。


22

没有,但如果你真的想做类似的事情,你可以伪造它。

namespace myNamespace {
  namespace _ns = ::myNamespace;
  int myInt;
  void myFunc() {
    _ns::myInt = 66;
  }
}
如果你改变了myNamespace,你只需要改变_ns以匹配它。
另外,命名空间后面的分号是多余的。

1
我总是忘记命名空间的赋值!这是一个我需要记住的技巧。 - fluffy

18

好问题。不,没有类似的东西。

此外,请注意在嵌套命名空间的情况下,myNamespace::myInt 甚至不是明确的(假设您有类似于 namespace myNamespace { namespace myNamespace { … } } 的复杂情况)。为了保险起见,您需要使用完全限定的命名空间:

::myNamespace::myInt = 33;

:: 前缀表示全局命名空间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接