【发布时间】:2017-04-28 21:38:16
【问题描述】:
例如,单链表节点可能定义如下
namespace example_part1
{
class node
{
node * next;
int value;
}
}
假设我们只有一个整数列表。这个类允许有一个指向它自己类型的成员,因为指针都具有相同的大小,而不管底层数据结构的大小。
现在,为什么我不允许这样做
namespace example_part2
{
using node = std::pair<example_part2::node *, int>;
}
?
我知道这似乎是一个愚蠢的例子,但我想更多地了解它无法编译的原因。我实际上有与此类似的情况,它可能有用(不适用于 std::pair)。另外,假设这两个代码段来自不同的程序,即我没有节点自定义类以及在同一程序中别名为节点的对。
【问题讨论】:
-
node 会同时是一个自定义类和 std::pair 吗?
-
@MillieSmith 请查看我对主要问题的编辑(补充)
-
那么根据您的编辑,
using node = std::pair<node *, int>;是完全孤独的吗?如,node尚未定义?它应该如何知道实际类型?递归什么时候结束? -
@MillieSmith 与它知道类的实际类型的方式相同吗?
-
当你使用带指针的类时递归结束。您可以使用空指针构造一个节点。你如何构造 std::pair
? std::pair<std::pair<std::pair<....., int> *, int> *, int>
标签: c++ self-reference type-alias