【问题标题】:graph/tree implementation with incomplete types不完整类型的图/树实现
【发布时间】:2013-11-24 15:08:39
【问题描述】:

这个问题之前已经讨论过很多次了。如果需要怎么办:

struct Node
{
  ::std::vector<Node> nodes_;
};

here 得到的印象是指向Node* 的(智能)指针可能是规范的解决方案。这意味着一些额外的间接性和相应的性能损失。从here,我们看到,libstdc++ 支持::std::vector&lt;T&gt; 实例化,其中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&lt;Node&gt; nodes_; 的声明点是不完整的类型,是否存在其他解决方法?

【问题讨论】:

标签: c++ c++11 stl


【解决方案1】:

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

所以你的节点可以变成:

#include <boost/container/vector.hpp>

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    相关资源
    最近更新 更多