这是测试代码
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
。
答案 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!