Ho un problema,si puo' trasformare questa funzione ricorsiva in una funzione non ricorsiva?Originariamente inviato da shodan
Una cosa del genere insomma (consideralo pseudo codice anche se non lo è)
codice:void check_nodes(const Node& nd) { if (nd.hasChildNodes()) { NodeList ndlist = nd.getChildNodes(); for (long sz=0; sz<ndlist.getLength(); ++sz) { Node znd = ndlist.getItem(sz); wcout << znd.getNodeType()<< endl; check_nodes(znd); } } }
Perchè ho una classe Cimporter e una classe CColladaReader.
La classe Cimporter è una classe generica di importzione , che non dipende dalla classe ccolladareader , l'ho resa generica per poterla utilizzare su vari tipi di importazione , ad es .3ds(3dstudio) o x.
Nlla classe Cimporter tutto ha una logica del tipo:
dove m_pApi è una classe specifica dell'importatore incapsulata che ad es puo' essere Ccolladareader o C3dsreader ed è la classe che fa il lavoro di importazione grezzo dipendente dal tipo di file.Inizializzandp semplicemente la classe m_pApi ad una classe C3dsreader o Ccolladareader cambio il tipo di importazione mentre Cimporter rimane la stessa.codice:void CImporter::ImportVertex() { //chiamo la funzione di reset dei vertici m_pApi->VertexReset(); float x,y,z; //finchè il reader mi restituisce true ho un vertice da importare //esco quando non ci sono piu' vertici for(int index = 0;m_pApi->NextVertex();index++) { if(m_pApi->ImportVertex(&x,&y,&z)) { Vertex* v = new Vertex(); v->_x = x; v->_y = y; v->_z = z; v->_nx = 0.; v->_ny = 0.; v->_nz = 0.; m_CurrMeshVertexes.push_back(v); } } }
Ora:
Nei file 3d bisogna in genere ciclare lo scene graph che descrive l'oggetto e andare ad importare la geometria,il materiale e la posizione per ogni nodo di questo.
Vorrei utilizzare una struttura del tipo:
ma per ciclare i nodi nello scene graph ho una funzione ricorsiva , che non so controlare dalla logica di importazione(Cimporter) , è per questo che chiedo se è possibile rendere la funzione ricorsiva una fuunzione normale.codice:m_pApi->VertexReset(); for(int index = 0;m_pApi->NextVertex();index++) { if(m_pApi->ImportVertex(&x,&y,&z)) { } }
Grazie.
Grazie.

Rispondi quotando