Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [c++]Vertex e template

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

    [c++]Vertex e template

    ciao.
    Sto sviluppando un applicazione in directx .
    mi trovo davanti al seguente problema:
    ho creato una classe CBaseMesh che ha come variabile membro un vertexbuffer , il vertexbuffer non è altro che una collezione di vertici.
    Posso avere nCBaseMesh ma , ognuna di queste puo' avere il suo vertexbuffer di vertici.
    ogni vertice è definito con una struttura che puo essere di tipo differente ad es:

    codice:
    Struct Vertex1
    {
        D3DXVECTOR4 Pos;
        D3DXVECTOR3 Norm;
        D3DXVECTOR2 Tex;
    } 
    
    //o...
    
    Struct Vertex2
    {
        D3DXVECTOR4 Pos;
        D3DXVECTOR3 Norm;
    } 
    //o...
    
    Struct Vertex3
    {
        D3DXVECTOR4 Pos;
    }
    e il vertexbuffer potra' essere
    Vertex1 VertexBuffer [];
    o
    Vertex2 VertexBuffer[];
    o
    Vertex3 VertexBuffer[];

    dove
    VertexBuffer è la variabile(array di vertex) e Vertex1, Vertex2, Vertex3 sono tre strutture o classi di tipo diverso

    ora:è possibile definire una cMeshBase con il suo Vertexbuffer di tipo differente in risposta a parametri runtime differenti utilizzando i template?
    pero' il tipo CMeshBase non deve cambiare , potra' essere CMeshBase<Vertex1> o
    CMeshBase <Vertex2> o CMeshBase<Vertex3> ma sempre del tipo CMeshBase.
    grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    62
    Perche' non usi una classe base comune per i tipi templatizzati ? Esempio:

    codice:
    class _CMeshBase {};
    
    template<class T> class CMeshBase : public _CMeshBase {};

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    intanto grazie per la risposta.
    e a cosa mi serve questa classe base?
    scusa ma non ho capito bene.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    62
    Da quel che ho capito vorresti fare una cosa del genere :

    codice:
    template<class T> class CMeshBase {
        T VertexBuffer[sz];
        /* ... */
    };
    CMeshBase<Vertex1> vertex_one;
    CMeshBase<Vertex2> vertex_two;
    /* ... */
    E il tuo problema e' che i tipi dei vertex_nesimi differiscono; a questo punto mi pare ovvio che tu stia cercando di accumunare le varie classi templatizzate, che potrebbero, ad esempio, avere interfacce indipendenti dal tipo T:

    codice:
    class _CMeshBase {
    public:
        virtual bool make_something() =0;
    };
    
    template<class T> class CMeshBase : public _CMeshBase {
    public:
        virtual bool make_something() {}
    private:
        T VertexBuffer[size];
        /* ... */
    };
    
    void foo( _CMeshBase& ref  ) { ref.make_something(); }
    
    int main()
    {
        CMeshBase<int> vertex_one;
        foo(vertex_one);
    }

    Spero di non aver frainteso la richiesta!

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.