2014-12-16 14 views
6

Per esercitarsi, sto cercando di creare un parser di directory ricorsivo.Oggetto contenente gli elenchi di se stessi in modo ricorsivo

Per il bene della parsimonia, voglio contenere il risultato in modo ricorsivo anche, ad esempio:

1 class CDirectory 
2 { 
3  private: 
4  std::string name; 
5  std::vector<CDirectory> subDirectories 
6 public: 
7  //Various things, constructors etc. go here 
8 } 

Tuttavia, I see here quella linea 5 non è supportato comportamento - "La ++ standard C (2003) dice chiaramente che un'istanza un contenitore standard con un tipo incompleto, invoca un comportamento non definito. "

Cosa devo fare? Non c'è modo di fare in modo che un oggetto contenga un elenco di oggetti simili? Se non altro, so che non è affatto illegale creare un vettore di vettori, quindi questo è un oggetto che contiene se stesso.

+0

Per tutti se si desidera votare per chiudere: Fallo. Sono d'accordo che l'altra domanda (modificata in alto) è identica a questa. – medivh

+0

non è possibile creare un vettore dello stesso tipo di vettore. – Yakk

risposta

0

Fai un vettore di puntatori

std::vector<CDirectory*> subDirectories; 
+0

Considererei l'utilizzo di 'std :: shared_ptr ' invece dei puntatori grezzi per semplificare i problemi di gestione della memoria/durata. – sdzivanovich

+0

Non ho molta esperienza nell'usarli. Modificherò la mia risposta ... fammi sapere se è corretta. –

+0

@sdzivanovich Questo presuppone che la semantica condivisa sia richiesta. Che non è affatto chiaro. – juanchopanza

1

Boost ha containers that support incomplete types. Puoi usare uno di questi.

#include <boost/container/vector.hpp> 

class CDirectory 
{ 
    private: 
     std::string name; 
     boost::container::vector<CDirectory> subDirectories 
    public: 
     //Various things, constructors etc. go here 
}; 
Problemi correlati