Ich arbeite an einem kleinen persönlichen C ++ Projekt mit STL. Ich mag es nicht, " std::
" überall in meinen Header-Dateien zu haben, weil ich finde, dass es die Lesbarkeit behindert, aber gleichzeitig möchte ich mir später keine Probleme machen, indem ich using namespace std
in a Header-Datei.
Ich frage mich also, ob es eine Möglichkeit gibt, den Geltungsbereich der Deklaration using
zu beschränken, so dass sie auf den Inhalt meiner Header-Datei angewendet wird, aber gilt nicht für Dateien, die schließe es ein. Ich habe verschiedene Dinge ausprobiert.
Es scheint jedoch, dass das Einführen eines Bereichs auf diese Weise außerhalb einer Funktionsdefinition nicht zulässig ist. Gibt es eine Möglichkeit zu tun, wonach ich suche?
Bitte beachten Sie: Ich bin wirklich nicht daran interessiert zu diskutieren, ob dies eine gute Idee ist, ich möchte nur wissen, ob es möglich ist.
Ja, ich denke, das kann gemacht werden.
Um das zu erreichen, müssen Sie Ihren eigenen Namensraum erstellen. Ich habe einen Code geschrieben, der wie erwartet funktioniert.
Header-Datei sieht wie folgt aus:
%Vor%Die Implementierungsdatei sieht folgendermaßen aus:
%Vor%Bitte lassen Sie mich wissen, wenn dies Ihren Anforderungen nicht entspricht. Wir können darüber nachdenken.
Nein, das geht nicht. Ihr Versuch, einen Bereich im Header einzuführen, ist genau deshalb fehlgeschlagen, weil es keinen Header-Bereich gibt - Header-Dateien haben während der Kompilierung keinen speziellen Status. Die Übersetzungseinheiten sind eine Quelldatei, die erhalten wird, nachdem der Präprozessor damit fertig ist. Daher erweitern alle include
-Direktiven einfach die entsprechenden Header-Dateien. Dies verhindert, dass Sie den Inhalt der Header-Datei in irgendeiner Weise kontextspezifisch machen können.
Tags und Links c++ namespaces scope