Frage zu Objektdateien, Templates & dll/so



  • Hallo miteinander,

    also mir ist da im Zusammenhang mit Objektdateien und Templates eine Frage eingefallen, die mir google nicht beantworten konnte.

    Die Objektdateien werden vom Compiler erzeugt. Der Linker bindet diese zur eigentlichen executable.
    Template Klassen (als Beispiel) werden zur Compilezeit zu "richtigen" Klassen. Soll heißen der Typidentifier wird zum Beispiel mit einem Integer ersetzt.

    Jetzt will ich aber eine shared lib erstellen, welche Templates enthält. Ich nutze gcc (g++) und Makefiles. Mir ist augefallen, dass auch von den Templateklassen Objektdateien erzeugt werden, aber eigentlich ist noch garnicht bekannt mit welchen Typen die Templates ersetzt werden?!?!

    Also wir funktioniert das bei shared librarys und Templateklassen, werden in diesem Fall die "richtigen" Klassen erst zur Laufzeit erstellt?

    Ich weiß nicht ob ich mich verständlich ausgedrückt habe, ich bitte das zu entschuldigen.
    Hoffentlich könnt ihr mir das erklären, aber eventuell bin ich auch gerade einfach nur auf dem Holzweg.

    Danke...



  • Tobias W schrieb:

    Also wir funktioniert das bei shared librarys und Templateklassen, werden in diesem Fall die "richtigen" Klassen erst zur Laufzeit erstellt?

    Nein. Bei Generics ist das so ähnlich - die typspezifischen Informationen werden erst zur Laufzeit benötigt, sie können also auch ohne diese kompiliert werden -, aber Templates in C++ werden immer zur Kompilierzeit instantiiert (deshalb befindet sich die Implementation auch in den Headerdateien), weshalb man sie nicht in externe Bibliotheken auslagern kann.


Anmelden zum Antworten