templates frage



  • hoi leute..

    hab ueber dich suche paar threads wegen templateclassen gelesen. da stand zumeist, das man bei ner templateklasse alles in die header-datei schreiben "muss" und die auslagerung in eine cpp-datei nicht funktioniert.
    ist das definitiv so ? oer gibts es doch noch ne moeglichkeit ?
    ich hab naemlich einige templateklassen die jeweils einige hundert codezeilen haben und die so aufgeteilt sind. der BCB hat das ohne problme genommen. aber so laeufts wiedermal nicht unter gcc. so wie fast alles.
    wenn ich das jetz alles wieder umschreiben muss, dauert das ewig und 3 tage. hat jemand nen tip wie ich das am besten bewerkstellige ?

    cermy

    Meep Meep



  • du könntest sie in einen zweiten header auslageren.

    bsp:
    [cpp]
    // vector4.h
    template<
    typename T> class Vector4
    {
    public:
    Vector4();
    private:
    T val[4];
    };
    #include "vector4.inl"

    // vector4.inl
    template<
    typename T> Vector4<T>::Vector4()
    { /../ }
    [/cpp]



  • Auslagerung in eine cpp-Datei geht nicht, da der Templatecode ohne eine konkrete Instanzierung garnicht existiert aus Compilersicht. Damit der Code aber aus einer anderen Datei heraus erzeugt werden kann, muss er vollständig sichtbar sein und nicht in einer cpp-Datei 'versteckt'.

    Btw:
    Im noch entstehenden neuen C++-Standard ist von 'export templates' die Rede. Ob die genau dieses nun möglich machen oder nicht, kann ich Dir aber leider nicht sagen. (könnte mir auch nicht so recht vorstellen, wie das dann gehen soll)



  • afaik wird export nur von http://www.comeaucomputing.com/ unterstützt.



  • Harry Hirsch schrieb:

    Auslagerung in eine cpp-Datei geht nicht

    Doch, es geht schon. Genau dafür ist export ja vorgesehen. Nur unterstützt das momentan kein Compiler (bis auf Como).



  • groovemaster schrieb:

    Harry Hirsch schrieb:

    Auslagerung in eine cpp-Datei geht nicht

    Doch, es geht schon. Genau dafür ist export ja vorgesehen. Nur unterstützt das momentan kein Compiler (bis auf Como).

    Auch bei export hat man aber keine "getrennte Übersetzung" so wie man das von normalen Klassen kennt. Du kannst die Definitionen des Templates dann zwar in cpp-Dateien auslagern und du bist nicht mehr auf das "inclusion Model" festgelegt, nichtsdestotrotz muss die Definition des Templates nach wie vor dem Compiler bekannt sein.
    Und zwar immer wenn das Template instanziiert wird. Das nur damit hier keine Verwirrung aufkommt 😉


Anmelden zum Antworten