2013-11-24 81 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_; 
};