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_;
的声明处是不完整类型,是否还有其他解决方法?
有这个升压库:http://www.boost.org/doc/libs/1_48_0/doc/html/container/containers_of_incomplete_types.html。 – zch
@zch你会评论一个答案吗?我会接受。 – user1095108