Lösung mehrdeutige Aufrufe in C++ mit namespaces

Ich bin Zusammenführung einer statischen Bibliothek (assimp) in ein bestehendes Projekt (Spring RTS), wo sowohl die Bibliothek als auch die Projekt sind unter der normalen Entwicklung. Ich versuche, fügen Sie die Bibliothek in einer Weise, dass kann ich einfach wiederholen, die integration als neue Versionen heraus kommen.

Sowieso, das Problem ist, dass der Frühling die Bibliothek erfordert die Durchführung aller Mathematik über die streflop Mathematik-Bibliothek. In der Praxis bedeutet dies min(x,y) sollte ersetzt werden, mit streflop::min(x,y) überall dort, wo es verwendet wird (das ist eine Menge, wenn man bedenkt das Problem ist für alle Mathematik-Funktionen).

Ich tun könnte, die Masse regex ersetzen, aber ich hatte gehofft, für etwas ein wenig mehr elegant. Nach einigen Recherchen und Tests schien es, dass das hinzufügen using namespace streflop; an der Spitze von jedem .cpp-Datei würde den trick tun, aber es hat nicht.

Der genaue Fehler ist:

/mnt/work/workspace/spring-patch-git/spring/rts/lib/assimp/code/FixNormalsStep.cpp:147: error: call of overloaded sqrtf(const float&) is ambiguous
/usr/include/bits/mathcalls.h:157: note: candidates are: float sqrtf(float)
/mnt/work/workspace/spring-patch-git/spring/rts/lib/streflop/SMath.h:347: note:                 streflop::Simple streflop::sqrtf(streflop::Simple)

Ich dachte der ganze Sinn von namespaces war zu beheben, diese Art der Sache, aber es scheint nicht, hier zu arbeiten. Ich bin ein bisschen verwirrt durch den Verweis auf streflop::Einfach wie gut. Ist das ein geschachtelten namespace und könnte sein, dass ein Teil der Grund, warum es nicht so funktioniert wie erwartet?

InformationsquelleAutor SpliFF | 2010-01-03
Schreibe einen Kommentar