Eine der Unklarheiten meines Entwicklungssystems (Codegear C ++ Builder) ist, dass einige der automatisch generierten Header darauf bestehen, ...
using namespace xyzzy
... Anweisungen in ihnen, die sich auf meinen Code auswirken, wenn ich ihn am wenigsten will oder erwarte.
Gibt es eine Möglichkeit, eine vorherige "using" -Anweisung irgendwie abzubrechen / zu überschreiben, um dies zu vermeiden?
Vielleicht...
unusing namespace xyzzy;
c++
namespaces
c++builder
Roddy
quelle
quelle
Antworten:
Nee. Es gibt jedoch eine mögliche Lösung: Wenn Sie Ihre Include-Direktive in einen eigenen Namespace wie diesen einfügen ...
... dann werden die Auswirkungen der Verwendung von Anweisungen in diesem Header neutralisiert.
Das kann in einigen Fällen problematisch sein. Aus diesem Grund wird in jedem C ++ - Styleguide dringend empfohlen, keine "using namespace" -Anweisung in eine Header-Datei einzufügen.
quelle
Nein, Sie können einen Namespace nicht deaktivieren . Das einzige, was Sie tun können, ist, die
using namespace
Anweisung in einen Block zu setzen, um den Umfang einzuschränken.Beispiel:
Möglicherweise können Sie die Vorlage ändern, die für Ihre automatisch generierten Header verwendet wird.
quelle
Bei Konflikten können explizite Namespaces verwendet werden:
quelle
Zum späteren Nachschlagen: Seit der XE-Version gibt es einen neuen Wert, den Sie
using namespace System;
# definieren können, um das gefürchtete int zu vermeiden : DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USEquelle
Wie wäre es mit sed, perl oder einem anderen Befehlszeilentool als Teil Ihres Erstellungsprozesses, um die generierten Header zu ändern, nachdem sie generiert wurden, aber bevor sie verwendet werden?
quelle
Ein kurzes Experiment mit Visual Studio 2005 zeigt, dass Sie diese Header in Ihren eigenen benannten Namespace einschließen können und dann das,
use
was Sie von diesem Namespace benötigen (aber nichtuse
den gesamten Namespace, da dadurch der Namespace eingeführt wird, den Sie ausblenden möchten.quelle
quelle