[SOLVED] Template Klassen



  • Hey

    habe ich das richtig verstanden, dass man bei Template Klassen die Dateien für die Definition und Deklaration nicht nach dem üblichen .h und .cpp trennen kann, sondern alles in eine Datei gehört? Und die Methoden nach Möglichkeit als inline definiert werden sollten?

    Danke im voraus

    Nerva



  • Nicht ganz.

    Wenn du ein Funktionstemplate oder Klassentemplate nutzen willst, dann muss der Compiler zur Compilezeit (nicht erst beim Linken!) alles darüber wissen.

    Gewöhnlich wird das erreicht, wenn du in deiner Headerdatei einfach alles direkt definierst:

    // Foo.h
    template<class T>
    void foo(T const& x)
    {
        std::cout << x;
    }
    

    Dann gibt es noch die logische Trennung, indem die Definitionen in den Header inkludiert werden:

    // Foo.impl
    template<class T>
    void foo(T const& x)
    {
        std::cout << x;
    }
    
    // Foo.h
    template<class T>
    void foo(T const& x);
    
    include "Foo.impl"
    

    Und dann gibt es noch das Schlüsselwort export (?!)...


  • Mod

    Vorab: Es heißt Klassentemplate, nicht Template Klasse.

    sondern alles in eine Datei gehört?

    Es muss nicht in eine Datei. Du kannst es auch in zwei Header aufteilen; was aber immer gelten muss ist dass in jeder Übersetzungseinheit (bzw. Source-Datei, .cpp) in der du das Template verwendest die Definition vorhanden ist.

    In C++98 wurde ein Schlüsselwort namens export eingeführt, welches das von dir angesprochene Aufteilen ermöglichen sollte, jedoch war die Implementierung so kompliziert und zeitaufwendig dass es wieder entfernt wurde und seit C++11 zwar ein reserviertes aber nicht benutztes Schlüsselwort darstellt.

    Und die Methoden nach Möglichkeit als inline definiert werden sollten?

    Nein, inline ist bei Funktionstemplates überflüssig.



  • Okay Danke 🙂


Anmelden zum Antworten