Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]Template e classe dati specifica

    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.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    A mio avviso il modo più semplice è parametrizzare la funzione.

    codice:
    template <typename T>
    NomeClasse::getProperties(std::vector<T>& vec);
    che però ha lo svantaggio di dover implementare la funzione nell'header file.

    Un secondo modo è di creare un adapter che prende al costruttore il vector che ti interessa e lo riempie con un metodo apposito nella funzione getProperties().

    Un terzo modo è illustrato qui:
    http://www.eptacom.net/pubblicazioni/pub_it/nl_7.html
    però lo trovo parecchio contorto (e potenzialmente poco efficiente).

    Magari se posti il codice della getProperties() si può dire qualcosa in più.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    Un secondo modo è di creare un adapter che prende al costruttore il vector che ti interessa e lo riempie con un metodo apposito nella funzione getProperties().
    cos è un adapter essenzialmente ?(il pattern adapter?) e come dovrebbe funzionare in questo caso se hai 2 m da spiegarmelo.

    grazie

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Il problema non è spiegartelo, il punto è vedere quanto e come si possa adattare a quella funzione.
    Senza un esempio pratico sul tuo codice non è possibile fare alcuna assunzione.

    Comunque un esempio di adapter può essere un function object che prende uno o più parametri al costruttore e li usa in operator().
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.