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