Ich modifiziere ein großes C++ - Projekt, das in einem seiner Hauptheader eine enum FooBar definiert. Dieses Enum wird überall aufgenommen, und leider ist kein Namespace.Ist es möglich, einen C++ - Namespace zu allen Symbolen aus einer C-Bibliothek hinzuzufügen?
Von diesem Projekt möchte ich eine C-Bibliothek verwenden, die leider auch eine enum FooBar im selben globalen Namespace definiert.
Ich kann die Bibliotheksimplementierung nicht ändern, und es ist schwierig, die Enumeration im C++ - Projekt umzubenennen oder zu benennen, da sie überall verwendet wird.
Also idealerweise würde ich einen Namensraum zu allen Symbolen aus der C-Bibliothek hinzufügen. Ich habe so etwas wie versucht:
namespace c_library_foo {
#include <c_library_foo.h>
}
...
c_library_foo::c_library_function()
...
und das funktioniert gut bis Kompilation betrifft, aber natürlich der Linker versagt dann die Symbole aus der Bibliothek zu lösen, wie der Namespace nicht in der Umsetzung ist.
Mit Ausnahme jetzt Ihr Programm wird fehlschlagen zu verknüpfen (Oder vielmehr, zeigt undefiniertes Verhalten). –
@Billy: Dies ist nicht undefiniert. Dies ist genau das, was C++ in die C-Header einfügt. Wenn Sie einschließen, dann können Sie std :: memcmp() einfach in Ordnung bringen. –
@Zan: Weil C++ definiert, dass die Funktion da sein soll. Nur weil es auf * Ihrer * Plattform funktioniert, bedeutet das nicht, dass es die eine Definitionsregel nicht bricht. –