具有不完整类型的图/树实现

时间:2013-11-24 15:08:40

标签: c++ c++11 stl

此问题已多次讨论过。如果需要,该怎么办:

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_;时是不完整的类型?

1 个答案:

答案 0 :(得分:2)

Boost containers处理不完整的类型并且是可移植的。

所以你的节点可以成为:

#include <boost/container/vector.hpp>

struct Node
{
  boost::container::vector<Node> nodes_;
};