Deklaration von Templates



  • Hallo Leute,
    kann mir jemand von euch vielleicht sagen, wie ich ein Template in einer Dll deklarieren muss?

    Wenn ich das so mache:

    //Header
    #define DllExport _declspec (dllexport)
    template <class T> DllExport bool Min (T a, T b);

    //Definition
    template <class T> bool Min (T a, T b)
    { return (a<b) ? a : b; }

    kann ich die Dll problemlos compilieren. Aber beim Functionsaufruf im Programm mit z.B. bool x= Min (10,20) bekomme ich
    LNK2019: Nicht aufgeloestes externes Symbol "bool __cdecl Min(int,int)"
    Danke schon mal im voraus.
    denali



  • Rückgabetyp ist bool, du gibst aber T zurück 🙄
    Ansonsten, wo steht Deklaration und Definition ?
    export beherrschen die meisten Compiler (noch) nicht.



  • phlox81 schrieb:

    Rückgabetyp ist bool, du gibst aber T zurück 🙄
    Ansonsten, wo steht Deklaration und Definition ?
    export beherrschen die meisten Compiler (noch) nicht.

    Hi,
    Deklaration und Definition stehen beide im Quellcode der Dll.
    Also: stuff.cpp und stuff.h
    Der Aufruf in irgendeinem anderen Programm, das diese nutzt.
    Warum gebe ich T zurück? mein Rückgabewert ist return (a<b) und das ist bool!
    DllExport funkt, da alle anderen Deklarationen einwandfrei erkannt werden. Nur halt die Templates nicht. Im übrigen ist es MS-VC7.



  • templates aus einer dll exportieren geht gar nicht.



  • Bist du da sicher? Microsoft macht das ja mit seiner ATL genauso.
    Gerade in einer Bibliothek sind doch allgemeine Funktionen gefragt.



  • bei atl stehen die templates im header



  • denali schrieb:

    Bist du da sicher? Microsoft macht das ja mit seiner ATL genauso.
    Gerade in einer Bibliothek sind doch allgemeine Funktionen gefragt.

    Die ATL kenne ich nicht, aber Templates werden zur Compilezeit instanziiert. Was
    soll der Compiler nun machen, wenn du ein allgemeines Template in einer DLL
    abspeichern willst? Von welchem Typ soll ¨T¨ jeweils sein? void, int oder float?
    Oder doch von einem anderen Typ?

    mfg
    v R



  • Danke, ist mir jetzt schon klar. Wenn ich das Ganze im Header definiere (wie vorhin vorgeschlagen), der ja zu Compilezeit mit ausgewertet wird. funktioniert es.
    Groß
    Denali



  • dann kannst du dir auch dein DllExport schenken 😉



  • denali schrieb:

    phlox81 schrieb:

    Rückgabetyp ist bool, du gibst aber T zurück 🙄
    Ansonsten, wo steht Deklaration und Definition ?
    export beherrschen die meisten Compiler (noch) nicht.

    Hi,
    Deklaration und Definition stehen beide im Quellcode der Dll.
    Also: stuff.cpp und stuff.h
    Der Aufruf in irgendeinem anderen Programm, das diese nutzt.
    Warum gebe ich T zurück? mein Rückgabewert ist return (a<b) und das ist bool!

    Wieso steht dann dahinter noch ?a:b ?? Was bezweckst du damit ?



  • Das war völliger Schwachsinn! Du hattest ja auch Recht. Ich hab tatsächlich Typ T zurückgegeben und nicht das Ergebnis des Vergleichs. Reine Gewohnheit, weil ich solche Funktionen normalerweise als int F() schreibe und nicht als bool.
    Aber der eigentliche Fehler war die Sache mit der Definition im Header.


Anmelden zum Antworten