Wie kann ich einen Namespace „nicht verwenden“?
-
03-07-2019 - |
Frage
Eine der Launen meines Entwicklungssystems (Codegar C ++ Builder) ist, dass einige der automatisch generierten Header darauf bestehen, ...
using namespace xyzzy
... Aussagen in ihnen, die sich auf meinen Code auswirken, wenn ich es am wenigsten möchte oder erwarte.
Gibt es eine Möglichkeit, wie ich eine vorherige "Anweisung" mit "Anweisung" irgendwie abbrechen/überschreiben kann, um dies zu vermeiden?
Vielleicht...
unusing namespace xyzzy;
Lösung
Nö. Aber es gibt eine potenzielle Lösung: Wenn Sie Ihre Richtlinie in einen eigenen Namespace einschließen, wie diese ...
namespace codegear {
#include "codegear_header.h"
} // namespace codegear
... dann werden die Auswirkungen der Verwendung von Richtlinien innerhalb dieses Headers neutralisiert.
Das könnte in einigen Fällen problematisch sein. Deshalb empfiehlt jeder C ++ - Style Guide dringend nicht Einfügen einer "Namespace" -Direktive in einer Header -Datei.
Andere Tipps
Nein, du kannst nicht nicht verwendet ein Namespace. Das einzige, was Sie tun können, ist, das zu setzen using namespace
-Einen Block, um den Umfang zu begrenzen.
Beispiel:
{
using namespace xyzzy;
} // stop using namespace xyzzy here
Vielleicht können Sie die Vorlage ändern, die von Ihren automatisch generierten Headern verwendet wird.
Möglicherweise stecken Sie mit expliziten Namespaces für Konflikte fest:
string x; // Doesn't work due to conflicting declarations
::string y; // use the class from the global namespace
std::string z; // use the string class from the std namespace
Als zukünftige Referenz: Seit der XE -Version gibt es einen neuen Wert, den Sie #definieren können, um die gefürchteten zu vermeiden using namespace System;
Int die inklusive: delphiHeader_no_implicit_namespace_use
Wie wäre es mit SED, Perl oder einem anderen Befehlszeilen-Tool als Teil Ihres Build-Prozesses, um die generierten Header nach ihrer Erstellung zu ändern, aber bevor sie verwendet werden?
Schnelles Experiment mit Visual Studio 2005 zeigt, dass Sie diese Header in Ihrem eigenen Namensnamen und dann in Ihren eigenen Namensbereich einschließen können use
Was Sie aus diesem Namespace brauchen (aber nicht use
Der gesamte Namespace, wie er den Namespace einführt, den Sie verbergen möchten.
#include<iostream>
#include<stdio.h>
namespace namespace1 {
int t = 10;
}
namespace namespace2 {
int t = 20;
}
int main() {
using namespace namespace1;
printf("%d" , t);
printf("%d" , namespace2::t);
}