Templates: Definition via typedef/#define
-
Tach auch!
Worin liegt der Unterschied im kompilierten Code, wenn ich ein Template auf folgende zwei Weisen in einem DLL-Header definiere und dann benutze:
typedef TTemplate<Type> MyTemplate;#define MyTemplate TTemplate<Type>MyTemplate object; ... object.Method(); ...Grund der Frage: Bei einem reinen typedef kommt es zu Unresolved-External Fehlern, wenn im Header keine Dummy-Instanz erzeugt wird (BCB 5.5) und die DLL diesen Typedef nirgends benutzt. Benutze ich das Define, brauche ich keine Dummy-Instanz zu erzeugen (was klar ist: Erst beim ersten Benutzen des Defines wird der Typ für den Compiler "real").
Trotzdem frage ich mich: Gibt es beim Benutzen des Defines anstatt des Typedefs irgendwelche Nachteile (Performance, Speicherausnutzung)?
-
Hallo
defines sind immer schlechter als die (wenn vorhanden) spezielle C++ Alternative.
Dein Problem liegt daran, das die Implementation des Templates nicht vollständig im Interface der DLL verfügbar ist, nur die Definition. Das fürht dazu, das für Templates alle nur eine Header-Datei ausreicht (oder wie immer das dann genannt wird), und niemals in DLLs ausgelagert werden. Das ist auch logisch, denn erst wenn ein Template effektiv gebraucht wird, wird ein konkreter Typ erstellt, und zwar aus der kompletten Implementation.
bis bald
akari