当外部命名空间具有相同名称的成员时,访问未命名的命名空间的成员

时间:2012-02-23 11:53:23

标签: c++ namespaces

这是测试代码

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内的代码。如果代码看起来非常不切实际,请道歉。

P.S:我倾向于经常使用名称x

2 个答案:

答案 0 :(得分:5)

没有。指定命名空间的唯一方法是按名称,内部命名空间没有名称。

假设您无法重命名任何一个变量,您可以重新打开内部命名空间并添加一个不同名称的访问者函数或引用:

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

printf("%d", PS::inner_x);

答案 1 :(得分:0)

一种方法是添加此代码:

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

然后你可以访问你想要的东西:

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

演示:http://ideone.com/peqEs