Template-Typedef forwarden



  • Hiho,

    ich habe ein Template-Klasse, von welcher ich eine konkrete Instanz als Typedef anlege:

    template<typename Base>
    class COpenGLTemplate : public Base
    {
        ...
    };
    //...
    typedef COpenGLTemplate<CWinOpenGL> COpenGL;
    

    nun habe ich an anderer Stelle eine rein abstrakte Klasse, welche in einer abstrakten Methode einen Referent auf "COpenGL" verlangt und dazu hatte ich ein einfache Forward-Deklaration "class COpenGL". Da meckert der Compiler aber:

    error C2371: 'OpenGLLib::COpenGL': Neudefinition; unterschiedliche Basistypen

    Ist das Forwarden in diesem Fall generell nicht möglich?

    MfG Pellaeon



  • du kannst IIRC das template selber forwarden und den typedef danach nochmal bringen:

    template <class> class COpenGLTemplate;
    typedef COpenGLTemplate<CWinOpenGL> COpenGL;
    


  • Muss dazu nicht zumindest COpenGLTemplate vollständig definiert sein?
    Und CWinOpenGL natürlich auch, falls COpenGLTemplate einen vollständig definierten Template-Parameter braucht.


  • Mod

    hustbaer schrieb:

    Muss dazu nicht zumindest COpenGLTemplate vollständig definiert sein?
    Und CWinOpenGL natürlich auch, falls COpenGLTemplate einen vollständig definierten Template-Parameter braucht.

    Warum? Hier findet noch keine Instantiierung statt. COpenGL ist folglich zunächst unvollständig, erst wenn ein Kontext auftritt, in dem COpenGL vollständig definiert sein muss findet die Instantiierung implizit statt und erst dann muss COpenGLTemplate definiert sein.



  • hm.
    OK 🙂


Log in to reply