template und spezialisierungen



  • hallo,

    was bringt eigendlich dieses template ???

    template <> class Txx<void*>
    {
      //...
    }
    
    Txx<void*> p;
    

    rum wie num, ich habe einen pointer der auf irgendwas zeigt.
    hat jemand ein beispiel wie ich diesen pointer arbeiten kann, bzw. für was ich
    ihn nutzen kann.

    danke volker



  • Einem void-Pointer kann der Wert jedes anderen Zeigertyps zugewiesen werden.
    Ansonsten guck mal hier:
    http://www.google.de/search?hl=de&ie=UTF-8&oe=UTF-8&q="C%2B%2B"+%2B"void"+%2B"Zeiger"&meta=
    In der FAQ ist das sicherlich auch schon mal erklärt worden.

    Code-Hacker



  • was bringt eigendlich dieses template ???

    Es handelt sich nur um eine konkrete Spezialisierung. So kannst du auf void * anders reagieren, als auf die anderen Typen.



  • und im template-konzept wie überladen, operator ??



  • Ähem... könntest Du die Frage nochmal neu formulieren?
    Ich versteh irgendwie nicht was Du damit meinst.



  • Jester schrieb:

    Ähem... könntest Du die Frage nochmal neu formulieren?
    Ich versteh irgendwie nicht was Du damit meinst.

    ok, ich versuche es mal so.

    Vererbungsstrucktur

    class CWinE: public Txx<CWin> 
    { 
      //... 
    }'; 
    
    class CWinD: public Txx<CWinFrame>  //CWinFrame ist abgeleitet von CWin 
    { 
      //... 
    }; 
    
    //abstrakte klasse
    template <class BASE> class TAxx: public BASE
    { 
    public: 
      virtual HRGN GetClipRgn(ClipInfo* pCI=NULL) = 0; 
      virtual bool IsClipRgn() = 0; 
      //... 
    
    protected: 
      virtual void ReflexMsgFont() {}; 
    }; 
    
    //mit dem template hänge ich mich zwischen die klassen 
    
    template <class BASE> class Txx : public TAxx<BASE> 
    { 
    public:
      HRGN GetClipRgn(ClipInfo* pCI=NULL)
      {
      } 
      bool IsClipRgn()
      {
      } 
      //... 
    
    protected: 
      bool m_bCreate;
      //...
    };
    

    sinn muß es sein für alle Txx<BASE> einen pointer zu speichern, wobei BASE eigendlich unbestimmt ist, das BASE z.b. CWin oder CWinFrame sein kann.

    mit diesem pointer muß ich auf meine member und functionen in Txx<BASE> und abgeleiteten klassen zugreifen können.

    Txx<void*>* p;   //p ist in dem fall ein gültiger pointer
    p->m_bCreate;
    bool b=p->IsClipRgn();
    

    ich denke mit dem -> virtual operator sollte es in einer abgeleiteten klasse gehen.


Anmelden zum Antworten