2014-12-16 19 views
6

Dla celów praktycznych próbuję utworzyć rekurencyjny parser katalogów.Obiekt zawierający listy samoczynnie rekursywnie

Dla skąpstwa, chcę zawierać wynik rekurencyjnie też np:

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 } 

Jednak I see here tej linii 5 nie jest obsługiwany zachowanie - „C++ Standard (2003) wyraźnie mówi, że instancji standardowy kontener o niepełnym typie wywołuje niezdefiniowane zachowanie. "

Co zatem mam zrobić? Czy nie ma sposobu, aby obiekt zawierał listę podobnych obiektów? Jeśli nic więcej, wiem, że nie jest to nielegalne, aby stworzyć wektor wektorów, więc jest to obiekt, który zawiera się.

+0

Dla was wszystkich rozważa głosowanie zamknięcie: Zrób to. Zgadzam się, że drugie pytanie (edytowane u góry) jest identyczne z tym. – medivh

+0

nie można utworzyć wektora tego samego rodzaju wektora. – Yakk

Odpowiedz

0

Zrób wektor wskaźników

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

Zastanowiłbym się nad użyciem 'std :: shared_ptr ' zamiast surowych wskaźników, aby ułatwić zarządzanie pamięcią/problemy z czasem życia. – sdzivanovich

+0

Nie mam zbyt dużego doświadczenia z ich używaniem. Zmienię moją odpowiedź ... daj mi znać, jeśli jest poprawna. –

+0

@sdzivanovich Zakłada to, że wymagana jest wspólna semantyka. Co nie jest wcale jasne. – juanchopanza

1

przyśpieszenia containers that support incomplete types. Możesz użyć jednego z nich.

#include <boost/container/vector.hpp> 

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