Library-Collisions wie umgehen?
-
Hallo,
folgendes Problem: Ich nutze in meiner Software eine Klasse, die basic typedefines wie
#define int Booleannutzt (nicht meine Idee/Implementierung). Nun binde ich an anderer Stelle die ACE/TAO-Corba-Implementierung ein, die ihrerseits ein Boolean definiert. Da knallt es dann natürlich. Jetzt möchte ich ungern das define und damit den ganzen Code ändern, der es benutzt, die Corba-Library hingegen kann ich schlecht ändern.
Ein Notbehelf wäre#undef Boolean #include <ace/corba.h>aber wenn danach dann noch eine Klasse auf das alte include angewiesen ist, geht das ja auch schief. Wahrscheinlich muss ich also jedes einzelne define, bei dem das passiert, wiederherstellen?!
Und was mache ich bei typedefs? Die kann ich ja nicht so einfach undeffen...
-
Und was mache ich bei typedefs? Die kann ich ja nicht so einfach undeffen...
Die kannst du in einen eigenen namespace packen.
nicht meine Idee
Gib es demjenigen zurueck, der das Problem verursacht hat.
-
Ich würd wohl einfach hergehen und aus
#define int Boolean#define int Boolmachen. Und dann replace all machen.
-
banshee schrieb:
#define int BooleanDu meinst
#define Boolean intDie Lösung ist völlig simpel: Das #define einfach auf
typedef int Boolean;ändern. Da das typedef global ist, ändert sich der Code in deiner Library nicht. Corba verwendet Namespaces, damit umgehst du die Kollision.
-
Müssen diese beiden Abartigkeiten denn unbedingt in der gleichen Übersetzungseinheit verwendet werden?
Wenn ja, hast du ja bereits brauchbare Lösungen. Namespaces bieten sich in C++ natürlich an.
-
Ich würde nur Namespaces dafür verwenden.
Hatte mal das Vergnügen einer nicht entdeckten typedef struct Kollision. Erzeugte bösartige Fehler, die auf dem ersten Blick nicht erkennbar waren.

Je nach Größe einer Bib, könnte man auch ein Wrapper entwickeln