ciao.
Ho varie tipologie di elemento(classi che derivano tutte dalla stessa classe base)e ho vari vector stl che contengono tutti gli elementi presenti in un documento per ogni tipologia di elemento.
Ho un visitor che uso per caricare dati e restituire una stuttura tipica della classe elemento,ad es : beam avrà una struttura BeamProperties con tutti i dati che mi servono per rappresentare quella classe ad es profondità estrusione , direzione estrusione ecc... alcuni elementi sono tipici della classe ( non si trovano nelle altre classi) e quindi tipici della struttura che rappresenta e contiene i dati delle proprietà di quella tipologia.
Il visitor ha la funzione , passato elemento per elemento ,di caricare i dati dalle classi della tipologia (ad es beam).
passo alla domanda:
dato che il visitor ha funzioni comuni che dovrei reimplementare per le varie classi tipologia , mi chiedevo se fosse possibile creare un template in modo da passare la classe specifica delle proprietà al visitor tramite template e caricarla, per poi recuperare
un vettore con tutte le classi proprietà di quel tipo dall esterno.
questo per non creare vari visitor specifici per ogni tipologia
mi spiego:
codice:
CVisitorBeam visitorBeams
for each beam in Beams
visitorBeams.accept(beam)//carico le proprietà
vector< beamProperties > vAllBeamProperties = visitorBeams.getProperties()//mi faccio restituire un vettore con le prorietà dei beams
CVisitorWall visitorWall
for each wall in Walls
visitorWall.accept(wall)//carico le proprietà
vector< wallProperties > vAllBeamProperties = visitorWall.getProperties()//mi faccio restituire un vettore con le prorietà dei wall
codice:
posso fare qualcosa del tipo:
CvisitorGeneral<tipoclasseproprietà> visitorGeneral
for each beam in Beams
visitorGeneral.accept(beam)//carico le proprietà
vector< tipoclasseproprietà> vAllSpecificsProperties = visitorGeneral.getProperties()
CvisitorGeneral<tipoclasseproprietà> visitorGeneral
//CvisitorGeneral<wallProperties> visitorGeneral
for each wall in Walls
visitorGeneral.accept(wall)//carico le proprietà
vector< tipoclasseproprietà> vAllSpecificsProperties = visitorGeneral.getProperties()
//vector< wallProperties> vAllSpecificsProperties
praticamente al visitor passo il template col tipo di proprietà specifico , istanzio un vettore di quel tipo nel visitor e lo riempio diversamente per ogni tipologia e lo restituisco.
puo essere corretto?
grazie.