【发布时间】:2013-11-24 15:08:39
【问题描述】:
这个问题之前已经讨论过很多次了。如果需要怎么办:
struct Node
{
::std::vector<Node> nodes_;
};
从here 得到的印象是指向Node* 的(智能)指针可能是规范的解决方案。这意味着一些额外的间接性和相应的性能损失。从here,我们看到,libstdc++ 支持::std::vector<T> 实例化,其中T 是不完整的类型,但不是libc++。这几乎不便携。但一种解决方案可能是支持不完整类型的可移植::std::vector 相似容器。最后,我们可以这样做:
template <::std::size_t I = 0>
struct Node
{
::std::vector<Node<I + 1> > nodes_;
};
template <>
struct Node<20>
{
};
这对我们的图/树施加了限制。由于Node 包含Nodes,但在::std::vector<Node> nodes_; 的声明点是不完整的类型,是否存在其他解决方法?
【问题讨论】:
-
为此有一个 boost 库:boost.org/doc/libs/1_48_0/doc/html/container/…。
-
@zch 你会让你的评论成为答案吗?我会接受的。