Gleichnamige Typen in verschiedenen Namespaces
-
Hi
Ich kann es gerade nicht testen, aber es wäre wichtig zu wissen ...
angenommen:
typedef int footype; namespace bar { typedef float footype; typedef footype bartype; }
Wäre bartype garantiert ein Alias für float, oder?
Grüße
-
Ja. Wenn dein Ausdruck allerdings komplizierter wird, musst du mit ADL aufpassen.
-
Hmm, ja, Danke.
Nach welchen Kriterien wird da eigentlich entschieden?
Angenommen auf den ersten Code folgt:
using namespace bar; footype var1;
Wird der Compiler das als int oder float deklarieren?
-
In diesem Fall wäre es ein mehrdeutiges Symbol. Dann musst du explizit qualifizieren:
bar::footype var1; // float ::footype var2; // int
Edit: Ne Übersicht über die Lookup-Regeln weiß ich auf Anhieb nicht. Es gibt so viele, dass du wohl kaum ne komplette Übersicht zu Überladungen mit Namespaces, Templates, Koenig-Lookup, Two Phase Name Lookup etc. findest außer den Standard.
-
Danke, danke.
Ich müsste das mal testen, da bei mir ::footype exakt bar::footype entspricht
(Mein bibliotheksinterner Name für Prozessids ist pid_t, jetzt beim Porten nach Linux sehe ich dass der Standardtyp auch pid_t heißt ... um konsequent zu sein muss der Typ auf jeden Fall definiert werden :>
-
Wie wäre es mit sowas?
namespace Meiner { #if defined(_WIN32) typedef DWORD pid_t; #elif defined(__linux__) using ::pid_t; #else #error Geht net #endif } // namespace Meiner
-
Stimmt, using ... darauf bin ich nicht gekommen!
Danke