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

    [C++] template e binding dati

    ciao .
    Sto provando a creare un oggetto trasformator che prende in ingresso due o tre parametri e crea un dato idn ucita, chiamando una funzione statica che ha i parametri come parametro scusate il gioco di parole.
    I due o tre parametri sono i dati che passo alla classe host ,il mio problema è come gestire l'aggancio tra i dati e l''oggetto transformation per es ho fatto un oggetto data che è un vector alla fine che contiene punti.
    ci sono 6 di questi oggetti data e vorrei in qualche modo passare un parametro template che mi dice : "quest oggetto trasformator prende in ingresso idati 1, 4,e 6 e ritorna qualcosa risultato della trasformazione"

    l'oggetto trasformator è qualcosa del genere:
    codice:
    class TransformNormals
    {
       public static Data doTrasformation(data data1, data data2, data data3){
       . . .trasformazione
       }
    }
    e lo vorrei passare cosi alla host class:
    codice:
    template<class Transform<1,4,6>, data1,data2,data3,data4,data5,data6>
    class transformhost
    {
    void initialize(){
       Transform::doTransformation(data1,data4,data6);
       }
    }

    esistono casistiche di questo tipo o risolvere con un traits o un convertitore da tipo a numerico ?
    o risolvere con un function object.
    grazie in anticipo.
    Ultima modifica di giuseppe500; 19-08-2014 a 17:15

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    Quote Originariamente inviata da giuseppe500 Visualizza il messaggio
    ciao .
    Sto provando a creare un oggetto trasformator che prende in ingresso due o tre parametri e crea un dato idn ucita, chiamando una funzione statica che ha i parametri come parametro scusate il gioco di parole.
    I due o tre parametri sono i dati che passo alla classe host ,il mio problema è come gestire l'aggancio tra i dati e l''oggetto transformation per es ho fatto un oggetto data che è un vector alla fine che contiene punti.
    ci sono 6 di questi oggetti data e vorrei in qualche modo passare un parametro template che mi dice : "quest oggetto trasformator prende in ingresso idati 1, 4,e 6 e ritorna qualcosa risultato della trasformazione"

    l'oggetto trasformator è qualcosa del genere:
    codice:
    class TransformNormals
    {
       public static Data doTrasformation(data data1, data data2, data data3){
       . . .trasformazione
       }
    }
    e lo vorrei passare cosi alla host class:
    codice:
    template<class Transform<1,4,6>, data1,data2,data3,data4,data5,data6>
    class transformhost
    {
    void initialize(){
       Transform::doTransformation(data1,data4,data6);
       }
    }

    esistono casistiche di questo tipo o risolvere con un traits o un convertitore da tipo a numerico ?
    o risolvere con un function object.
    grazie in anticipo.
    forse ho capito , posso usare una mappa con max 10 chiavi dato che al massimo ne ho 10 che sono le semantiche dell'opengl position,normal(i dati sono quindi inseriti per chiave) ecc....e posso trasformare ogni semantica in un indice che va da 0 a 10 e recuperare o agganciare quelle che corrispondono per chiave, quello che non so è come posso recuperare gli indici o la stringa per la mappa passandola da un parametro template ad es:
    è posibile fare cosi:
    codice:
    Transform<1,4,6>
    e recuperare per ogni oggetto l'1 ,4,6 ?relativa pero' a quell oggetto , è un template parameter?

    quello che voglio fare è configurare a design time poi a runtime posso usare la mappa e i transformer.

  3. #3
    Onestamente non riesco a capire che problema stai cercando di risolvere...
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    Quote Originariamente inviata da MItaly Visualizza il messaggio
    Onestamente non riesco a capire che problema stai cercando di risolvere...
    si scusa MItaly rileggendo l'ho capito anch io , scusate .

    io ho una mappa con coppie chiavi valori che contiene tutti i dati che mi servono e vorrei agganciare sapendo le chiavi(e le so) ad un command i parametri che configuro.
    Se per es ho una mappa con [0][parametro1] [1][parametro2] [2][parametro3]
    vorrei che il mio command si andasse a prendere i parametri da solo per cui è configurato e potesse essere eseguito, ho capito adesso che la soluzione migliore è passare la mappa e lasciare che il mio oggetto si prenda i parametri che gli servono dato che al suo interno ha gli indici.

    Spiego dove lo uso:
    Ho creato un oggetto mesh che ha vari gruppi di dati(sono vettori principalmente) : le posizioni, le normali, i colori ecc.. vorrei creare dei "trasformatori" per questi gruppi di dati e ho pensato ad una famiglia di oggetti command che prendono come input dati e li trasformano , ad ogni chiamata o solo all inizio.
    ad es ci sara il RicalcolaNormaliCommand o l'EstrudiCommand ecc.... e questi command li passo come parametri template cosi che posso configurare i trasformatori che voglio.
    chiaramente il RicalcolaNormaliCommand prendera in input dalla mappa le normali e le posizioni, l'EstrudiCommand prenderà le posizioni ec....

    ecco ho pensavo a qualcosa del genere
    codice:
    template<Class Transformer>
    class CMesh
    {
        map<int,BufferData>* m_pmappacondati = new map<int,BufferData>;
        vector<TransformerBase>m_transformer;
    
       void init(){
       'creo il trasformer all'inizializzazione
        Transformaer trans = new Transformer(m_pmappacondati);
        m_transformer.push_back(trans) 
       }
       void transform()
       {
             eseguo i m_transformer che sono nel vector
       }
    
    }
    vediamo cosa non riesco a fare :
    io vorrei passare i transformer come parametro template istanziarli e e aggiungerli al vector dei trasformatori, questo si puo fare in compile time o in design time?
    codice:
       void init(){
       'creo il trasformer all'inizializzazione
        Transformaer trans = new Transformer(m_pmappacondati);
        m_transformer.push_back(trans) 
       }
    come si fa?

    grazie, spero di essermi spiegato meglio.
    ciao.

  5. #5
    Mettiamo il caso, ma è solo un'ipotesi, che io abbia capito il tuo problema: Vuoi poter applicare una serie di trasformazioni (che vengono generate a run time) ai tuoi elementi grafici; quindi io ti consiglierei di impostare (in linea di massima) la struttura dell'applicazione nel seguente modo:


    codice:
    class CMesh { //Base Class
        //Interfaccia pubblica usata dai trasformer, ...
    }
    
    
    class Transformer { //Base Class
        public: virtual void doStuff(Mesh mesh) = 0;
    }
    
    
    class FooTransformer : public Transformer {
        public: FooTransformer(/*params ... */) { /*...*/ }
        public: void doStuff(Mesh mesh) { /* do stuff ...*/}
    }

    Quindi, una volta istanziato il Transformer che ti serve (se hai una serie di parametri fissi, che determinano il tipo di trasformer, puoi anche optare per i template), nel loop principale potrai applicare i vari effetti ai vari oggetti di tipo CMesh nel seguente modo:


    codice:
    CMesh myMesh(/*...*/);
    FooTransformer myTransformer(/*...*/);
    
    
    //....
    
    
    myTransformer.doStuff(myMesh);

    Quindi non sarà l'oggetto CMesh, target della trasformazione, a dover prelevare i parametri necessari alla trasformazione stessa, ma sarà la Trasformazione (in fase di istanza oppure nella chiamata) a disporre di tali informazioni.


    Ovviamente puoi mettere tutti i trasformer in un array ed eseguirli uno dopo l'altro (in questo caso avrai un array contenente le coppie <Transformer, CMesh>) in base a temporizzazioni o eventi.


    Spero di aver colto e di essere stato d'aiuto.
    Experience is what you get when you don’t get what you want

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 © 2025 vBulletin Solutions, Inc. All rights reserved.