2013-11-24 9 views
7

समस्या पर कई बार चर्चा की गई है। अगर एक की जरूरत है क्या करें:अपूर्ण प्रकारों के साथ ग्राफ/पेड़ कार्यान्वयन

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

से here एक धारणा है कि (स्मार्ट) Node* की ओर इशारा विहित समाधान हो सकता है हो जाता है। यह कुछ अतिरिक्त संकेत और एक समान प्रदर्शन हिट का तात्पर्य है। here से, हम देखते हैं कि libstdc++::std::vector<T> तत्कालता का समर्थन करता है, जहां T एक अपूर्ण प्रकार है, लेकिन libc++ नहीं है। यह शायद ही पोर्टेबल है। लेकिन एक समाधान पोर्टेबल ::std::vector लुकलाइक कंटेनर हो सकता है जो अपूर्ण प्रकारों का समर्थन करता है। अंत में, हम कर सकते हैं:

template <::std::size_t I = 0> 
struct Node 
{ 
    ::std::vector<Node<I + 1> > nodes_; 
}; 

template <> 
struct Node<20> 
{ 
}; 

जो हमारे ग्राफ/पेड़ पर सीमाएं लगाता है। क्या Node में Node एस है, लेकिन ::std::vector<Node> nodes_; की घोषणा के बिंदु पर एक अपूर्ण प्रकार है, इस तथ्य के कारण अतिरिक्त कार्यवाही मौजूद हैं?

+0

इस के लिए एक बढ़ावा पुस्तकालय नहीं है। – zch

+0

@zch क्या आप अपनी टिप्पणी का उत्तर देंगे? मैं स्वीकार करूंगा – user1095108

उत्तर

2

Boost containers अधूरे प्रकारों को संभालते हैं और पोर्टेबल हैं।

तो अपने नोड बन सकता है: 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_; 
}; 
संबंधित मुद्दे