此问题已多次讨论过。如果需要,该怎么办:
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
包含Node
s,但在声明::std::vector<Node> nodes_;
时是不完整的类型?
答案 0 :(得分:2)
Boost containers处理不完整的类型并且是可移植的。
所以你的节点可以成为:
#include <boost/container/vector.hpp>
struct Node
{
boost::container::vector<Node> nodes_;
};