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

发布于 2025-01-08 14:02:18 字数 418 浏览 0 评论 0原文

这是测试代码

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
}

有没有办法访问 main 内部(未命名)命名空间的 x

我不想更改 PS 内的代码。如果代码看起来非常不切实际,我们深表歉意。

PS:我经常使用 x 这个名字。

Here is the test code

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
}

Is there any way to access inner(unnamed) namespace's x inside main?

I dont want to change code inside PS. Apologies if the code looks highly impractical.

P.S: I tend to use the name x quite often.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

与往事干杯 2025-01-15 14:02:18

不可以。指定命名空间的唯一方法是通过名称,而内部命名空间没有名称。

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

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

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

No. The only way to specify a namespace is by name, and the inner namespace has no name.

Assuming you can't rename either variable, you could reopen the inner namespace and add a differently-named accessor function or reference:

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

printf("%d", PS::inner_x);
谎言月老 2025-01-15 14:02:18

一种方法是添加此代码:

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

然后您可以访问您想要的内容:

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

演示: http://ideone.com/peqEs< /a>

One way is to add this code:

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

and then you can access what you want:

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

Demo : http://ideone.com/peqEs

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文