2013-11-24 18 views
7

Sorun daha önce birçok kez tartışılmıştır. bir ihtiyacı varsa ne yapılmalı:Tamamlanmamış türlerde grafik/ağaç uygulaması

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

here itibaren bir Node* için (akıllı) işaretçileri kanonik çözüm olabilir izlenimini alır. Bu, bazı ek dolaylı ve buna karşılık gelen bir performans isabeti anlamına gelir. here itibaren biz T değil libc++ tamamlanmamış bir türüdür, ama nerede libstdc++, ::std::vector<T> instantiations desteklediğini görüyoruz. Bu neredeyse taşınabilir. Ancak bir çözüm, eksik türleri destekleyen portatif bir ::std::vector görünüm kabı olabilir. Son olarak, grafiğimiz/ağacımız üzerinde sınırlamalar getirecek olan

. Node'un Node s içerdiği, ancak ::std::vector<Node> nodes_; beyanı noktasında tamamlanmamış bir tür olması nedeniyle ek geçici çözümler var mı? Tamamlanmamış türleri ele almak ve taşınabilir olmak için

+0

bunun için bir destek kütüphane bulunmaktadır. – zch

+0

@zch Yorumunuzu cevaplayacak mısınız? Kabul edeceğim. – user1095108

cevap

2

Boost containers.

Yani Düğüm olabilir: http://www.boost.org/doc/libs/1_48_0/doc/html/container/containers_of_incomplete_types.html:

#include <boost/container/vector.hpp> 

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