类型的混叠和自我引用
Type aliasing and self-referencing
作为一个例子,可以将单连锁的列表节点定义如下
namespace example_part1
{
class node
{
node * next;
int value;
}
}
假设我们只有一个整数列表。该类可以具有指向自己类型的成员,因为指针的大小都相同,无论基础数据结构的大小如何。
现在,为什么我不允许这样做
namespace example_part2
{
using node = std::pair<example_part2::node *, int>;
}
?
我知道这似乎是一个愚蠢的例子,但是我想更多地了解为什么不编译的原因。实际上,我的情况可能很有用(不使用STD :: PAIP(。另外,假设这两个代码段来自不同的程序,即我没有一个节点自定义类,也没有一个将其作为一个节点的对组中的一个节点。
请注意,在type-alias
[type-id是]抽象声明器或任何其他有效的类型ID(可能引入一个 新类型,如类型ID中所述(。ID类型不能直接或 间接参考标识符。
本质上,别名可能不是递归的。
在参考cppReference在cppReference上的类型别名声明的规范时,ID不得直接或间接地参考引入的名称:
使用标识符attr(可选(= type-id; 标识符 - 该声明引入的名称,该名称成为类型名称 模板参数列表 - 模板参数列表,如模板中 声明类型ID-抽象声明器或任何其他有效的类型ID (如类型ID中所述,可能会引入一种新类型(。 type-id 不能直接或间接地指标识符。请注意这一点 标识符的声明是在Semicolon下面 type-id。
关于命名空间,请注意,std::pair<node *, int>
中的node
不参考名称空间example_part1
的node
,因此仍然是未定义的类型名称。
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 强制转换为引用类型
- 结构包含对自我或其他结构类型的引用
- 类型的混叠和自我引用
- 定义自我引用界面的正确方法是什么?
- 返回 void 或对自我的引用
- 如何声明自我引用模板类型
- 除了自我引用,在typedef中使用标签还有其他原因吗?