gpt4 book ai didi

c++ - 为什么我不能在 C++ 的限定命名空间中转发声明类型?

转载 作者:行者123 更新时间:2023-11-30 03:47:04 24 4
gpt4 key购买 nike

我试图避免从我自己的标题中包含一个自动生成的标题(在我的控制之外)。因此,我需要转发声明一个位于命名空间 nm 中的类型 Type,它本身位于全局命名空间中。以下是 MyHeader.h 的示例:

// My project defines two levels of nested namespaces 
namespace foo { namespace bar {
namespace nm { struct Type; }
...
} }

不幸的是,这定义了新的命名空间 foo::bar::nm 并向前声明了类型 foo::bar::nm::Type,这不是我想要的是。理想情况下,我可以像这样在限定命名空间 ::nm 中转发声明一个类型:

namespace foo { namespace bar {
namespace ::nm { struct Type; }
...
} }

我的编译器提示我不能在这里使用限定的命名空间(使用带有 C++11 设置的英特尔 ICC15)。这迫使我在开头提出所有这样的前向声明(forward declaration):

namespace nm { struct Type; }
namespace foo { namespace bar {
...
} }

在我的例子中,这很不方便,因为我需要转发声明许多类型,并且更愿意在我的标题中的各个分散位置与我自己的定义一起这样做。一种解决方法是不断“关闭”和“重新打开”我的嵌套命名空间,这并不理想。

为什么我不能在限定命名空间中转发声明类型?

最佳答案

因为 C++ 标准是这么说的。

关于c++ - 为什么我不能在 C++ 的限定命名空间中转发声明类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33836017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com