【问题标题】:C++ Define function of external namespace inside of nested namespaceC ++在嵌套命名空间内定义外部命名空间的功能
【发布时间】:2021-12-23 07:36:44
【问题描述】:

考虑代码

namespace A
{    
}

namespace B
{
    namespace ::A
    {
        void func();
    }
}

这是无效的 C++ 语法 - 但我正在寻找可行的方法。我需要声明 ::A::func(),但在命名空间 B 中(我不想要 B::A::func,而是 A::func)。

(如果你问为什么?那是因为 func() 最终将由一个宏声明,该宏也在命名空间 B 中声明一些东西。)

有可能吗?

【问题讨论】:

  • 在命名空间 A 中声明 func 之前关闭命名空间 B,然后关闭命名空间 A,然后重新打开命名空间 B。
  • 我的项目有这个需求。我们通过使用两个宏来解决它,一个用于在另一个命名空间中引用,另一个用于在正确的命名空间中声明该事物。 (我讨厌宏。)
  • @RichardCritten 这就是为什么我通常会手动编写代码。但这应该是宏观的通用解决方案。例如。它可能是 A::B::C - 我不知道有多少命名空间。我想那是不可能的。
  • @Eljay 目前我也做了同样的事情,只是想知道是否有更好的解决方案。

标签: c++ syntax namespaces syntax-error argument-dependent-lookup


【解决方案1】:

不,为了声明的目的,不可能以某种方式将自己重置到另一个命名空间范围内的全局命名空间。

虽然它有时会很有用,而且 C++ 确实以作为一种通用语言而自豪,尽管它会使源代码令人困惑,因为使用了 namespace ::A,尽管源代码告诉你,你不再在 namespace B否则你!如果您真的想看到这个,那么为什么不向标准委员会提出呢?

【讨论】:

    【解决方案2】:

    您可以使用using 声明。例如

    namespace A
    {
        void func();    
    }
    
    namespace B
    {
        using A::func;
    }
    

    然后例如在全局命名空间中你可以写

    void other_func()
    {
        B::func();
    }
    

    【讨论】:

      猜你喜欢
      • 2020-08-07
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      • 2011-01-02
      • 2018-02-03
      相关资源
      最近更新 更多