2013-11-24 54 views
7

这个问题已经被讨论过很多次了。怎么做,如果一个需要:不完整类型的图/树实现

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

here一个得到的印象是(智能)指针Node*可能是典型的解决方案。这意味着一些额外的间接和相应的性能影响。从here我们看到,libstdc++支持::std::vector<T> instantiations,其中T是一个不完整的类型,但不是libc++。这很难移动。但一种解决方案可能是支持不完整类型的便携式外观容器。最后,我们可以这样做:

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

有这个升压库:http://www.boost.org/doc/libs/1_48_0/doc/html/container/containers_of_incomplete_types.html。 – zch

+0

@zch你会评论一个答案吗?我会接受。 – user1095108

回答

2

Boost containers处理不完整的类型和便携式。

所以您的节点可以成为:

#include <boost/container/vector.hpp> 

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