ableitung von vector<double> aus DLL exportieren



  • Hi, ich habe eine Klasse, die von std::vector<double> erbt und die aus meiner dll exportiert werden soll.

    In der Importierenden Dll habe ich jjetzt, dass Problem, dass ich hunderte Linkerfehler bekomme, von wegen "vecor<double> existiert schon"

    Lässt sich dieses Problem irgend wie anders lösen, als die gesammte Implemetnierung der Klasse in den Header zu packen und sie einfach doch nicht zu exportieren?
    Da natürlich dadurch auch alle includes im Header stehen und die include abhängigkeiten enorm wachsen.



  • 1. std::vector ist nicht dafür gemacht als Basis Klasse zu dienen ➡ Benutze Aggregation anstelle von Vererbung.
    2. Eine Implementation aus einer DLL zu exportieren zieht einige (potentielle) Probleme nach sich. Als Lösung dafür kann folgender Ansatz gewählt werden:
    a.) Interface Definieren (abstrakte Klasse)
    b.) Eine Klasse die dieses Interface Impl.
    c.) Möglichkeiten bereitstellen, um die Objekte zu erzeugen / zerstören (die primitivste Lsg. ist einfach C- Funktioen zu exportieren).

    Alternativ kannst Du auch ein reines C- Interface bereitstellen.

    Simon



  • 1. std::vector ist nicht dafür gemacht als Basis Klasse zu dienen ➡ Benutze Aggregation anstelle von Vererbung.

    Naja die Vererbung macht an so einer Stelle schon Sinn.
    Alternativ müsste man ja alle public funktionen, die er Vector besitzt implementieren und implizite typkonvertierungs operatoren schreiben, die dann allerdings den Inhalt kopieren, was ich nicht möchte.

    Alternativ kannst Du auch ein reines C- Interface bereitstellen.

    Das ist nicht wirklich eine Alternative.

    Gibts nicht irgendwie die Möglichkeit, die Kasse partiell zu exportieren, so dass der Vector nicht mit exportiert wird und somit auch keine Probleme in anderen Projekten verursacht, wenn der Header mehrfach eingebunden wird?
    Edit:
    Das Problem scheint ja zu sein, dass in jedem Objekt, das den Header einbinded natürlich das Template instanziert wird. An sich ist das ja nicht schlimm, da beim zusammenlinken der objecte nur eine implementierung behalten wird.
    Das Problem ist ja aber, dass zusätzlich in der importierten lib die Template Instanzierung eine extenal linkage aufweist.


Anmelden zum Antworten