Namespaces in Source und Header
-
Habe verschiedene Implementierungen von namespaces gesehen. Ich ziehe folgenden Aufbau vor:
// a.h namespace a { extern int n_public; extern void f_public(); } // namespace a // a.cc namespace { int n_local; void f_local(); } // anonymous namespace namespace a { int n_public; void f_public() { } } // namespace a namespace { void f_local() { } } // anonymous namespaceDa die anonyme namespace das static von C in diesem Zusammenhang ersetzt, vermute ich dass obige Implementierung korrekt sein sollte. In anderen Implementierungen sind n_local und f_local() im cc-file in die namespace a gepackt, was ich nicht verstehe?
-
Tomahawk schrieb:
Da die anonyme namespace das static von C in diesem Zusammenhang ersetzt,
Naja, es macht schon etwas anderes. Aber der Einsatzzweck ist derselbe.
Tomahawk schrieb:
vermute ich dass obige Implementierung korrekt sein sollte.
Korrekt in sofern, dass es wahrscheinlich das macht, was Du willst, ja.
Tomahawk schrieb:
In anderen Implementierungen sind n_local und f_local() im cc-file in die namespace a gepackt, was ich nicht verstehe?
Was genau verstehst Du nicht?
-
Was ist denn ein anonymes namespace?
-
314159265358979 schrieb:
Was ist denn ein anonymes namespace?
Ein Namespace der keinen Namen hat. Dieser kann dann z. B. globale Variablen Fassen die in anderen Übersetzungseinheiten nicht verwendet werden können.
-
HighLigerBiMBam schrieb:
[...] die in anderen Übersetzungseinheiten nicht verwendet werden können.
...zumindest nicht über ihren Namen.
-
krümelkacker schrieb:
HighLigerBiMBam schrieb:
[...] die in anderen Übersetzungseinheiten nicht verwendet werden können.
...zumindest nicht über ihren Namen.
Klar kann man das mit einer Funktion umgehen, aber das gilt für so einiges in C++.