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

    [c++]std::functional e vector

    ciao.
    Devo richiamare una funzione che mi faccia una serie di operazioni, in un punto critico dell applicazione per performance.
    ho pensato di usare std::function(non so se c'è qualcosa di piu performante), tutte le funzioni hanno return type uguale(void) e parametri uguali(CRenderer* par).
    Volevo sapere se è possibile creare un vector per i function, dato che potrebbero essere dello stesso tipo, almeno i parametri e il return type sono uguali.


    grazie.

  2. #2
    std::function può essere memorizzata in un vector (è una classe di type-erasure che nasce apposta per questo), ma credo si perda qualcosina in performance dato che ci sono un po' di giri di indirezione prima di richiamare la funzione vera e propria - std::function di fatto contiene un puntatore ad un oggetto polimorfico che a sua volta contiene il puntatore a funzione o il puntatore a metodo+il "this" su cui richiamarlo, per cui ci sono tre/quattro dereferenziazioni prima di arrivare a chiamare la funzione vera e propria, e delle allocazioni nell'heap al momento di creare un oggetto di tipo std::function. Se questo per te è un problema dal punto di vista delle performance, probabilmente dovrai usare i normali puntatori a funzione.
    Amaro C++, il gusto pieno dell'undefined behavior.

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

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    vorrei pero prima di fare un altra domanda spiegare meglio quello che devo fare:

    ho una struttura del tipo
    codice:
    struct openglDrawItem
    {
        Glint shader,
        Glint vba,
        GLint texture ecc...
    
    }
    
    e degli oggetti entità:
    class CColumn
    {
    .
    variabili di stato
    .
    .
    openglDrawItem m_openglDraawitem
    
    }
    opengl definisce un "id" che è un int ad ogni creazione di un oggetto opengl , per usare quell' oggetto ci si rifa al suo id, ma questo non fa parte della domanda.

    ho pensato di creare dei piccoli oggetti del tipo della struttura di cui sopra per alleggerire la classe Entità che contiene l'oggetto grafico(la struttura) e per svincolarmi da classi varie , quello che c'è nella struttura è tutto cio che è necessario per disegnare con opengl quel particolare elemento grafico.
    il problema è che l'oggetto grafico ha dei parametri che possono cambiare e i cambiamenti vanno
    fatti arrivare all oggetto program(shader il primo della lista) la logica pero' in cui i cambiamenti vengono fatti è nell' oggetto Entità CColumn .
    e per fare i cambiamenti vengono invocate delle funzioni gl con i dati da mandare allo shader.
    ecco , io pensavo di lasciare la logica nelle classi entità e di fare contenere alla classe di disegno un puntatore a funzione che richiama una funzione membrodella classe Entità che fa le modifiche.
    Mi chiedevo anche se invece di fare un puntatore a funzione potessi usare dei puntatori e "agganciare" le variabili di stato(di comando setta colore rosso ecc..) dell oggetto entità sulla classe di disegno , quando si riperquote una modifica sulla classe entità automaticamente cambia la variabile "agganciata" e, dato che le classi di disegno vengono lette e disegnate in un ciclo infinito forse questo potrebbe essere il modo piu performante.
    vado in contro a problemi se uso questo metodo dei puntatori secondo voi che siete piu esperti?
    grazie.

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.