Доступ к члену безымянного пространства имен, когда внешнее пространство имен имеет члена с тем же именем - PullRequest
1 голос
/ 23 февраля 2012

Вот тестовый код

extern "C" {int printf(const char *, ...);}
namespace PS
{
   int x = 10; // A
   // some more code

   namespace {    
      int x = 20; // B
   }
   // more code
}

int main()
{
   printf("%d", PS::x); // prints 10
}

Есть ли способ получить доступ к внутреннему (неназванному) пространству имен x внутри main?

Я не хочу менять код внутри PS.Извиняюсь, если код выглядит крайне непрактичным.

PS: Я склонен использовать имя x довольно часто.

Ответы [ 2 ]

5 голосов
/ 23 февраля 2012

Нет. Единственный способ указать пространство имен - по имени, а внутреннее пространство имен не имеет имени.

Предполагая, что вы не можете переименовать ни одну из переменных, вы можете открыть внутреннее пространство имен и добавить функцию доступа с другим именем или ссылку:

namespace PS {
    namespace {
        int & inner_x = x;
    }
}

printf("%d", PS::inner_x);
0 голосов
/ 23 февраля 2012

Один из способов добавить этот код:

namespace PS
{
   namespace
   {
      namespace access
      {
          int &xref = x;
      }
   }
}

и тогда вы можете получить доступ к тому, что вы хотите:

std::cout << PS::access::xref << std::endl; //prints 20!

Демо: http://ideone.com/peqEs

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