Как мне обратиться к текущему пространству имен при объявлении его?Есть ли такие слова, как «я» / «это»? - PullRequest
22 голосов
/ 25 декабря 2011

Здесь, если я переименую пространство имен, я также должен помнить, что нужно посмотреть остальную часть кода и внести все необходимые изменения.Есть ли такие слова, как self, this или current для обозначения текущего пространства имен?

namespace myNamespace {
  int myInt;
  void myFunc() {
    myNamespace::myInt = 66;
  }
};

Ответы [ 3 ]

30 голосов
/ 25 декабря 2011

Почему вы ссылаетесь на свое текущее пространство имен? для этого нет необходимости, вы можете легко написать:

namespace myNamespace {
  int myInt = 33;
  void myFunc() {
    myInt = 33;
  }
};

Независимо от того, какие переменные объявлены там (например, глобальные myInt), переменные этой области будут использоваться по умолчанию.

Однако, если вы хотите переименовать, вы можете использовать методы IDE, такие как замена или рефакторинг.

22 голосов
/ 25 декабря 2011

Нет, нет, но если вы действительно хотите сделать что-то подобное, вы можете подделать это.

namespace myNamespace {
  namespace _ns = ::myNamespace;
  int myInt;
  void myFunc() {
    _ns::myInt = 66;
  }
}

Если вы измените myNamespace, вам нужно только изменить _ns, чтобы соответствоватьit.

Кроме того, точка с запятой после пространства имен является излишней.

18 голосов
/ 25 декабря 2011

Хороший вопрос. Нет, ничего подобного нет.

Кроме того, обратите внимание, что myNamespace::myInt даже не является однозначным в случае вложенных пространств имен (скажем, у вас есть запутанный случай namespace myNamespace { namespace myNamespace { … } }. Чтобы быть в безопасности, вам нужно использовать полностью определенное пространство имен :

::myNamespace::myInt = 33;

Где префикс :: относится к глобальному пространству имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...