Begrenzen des Gültigkeitsbereichs von "using namespace" in einer Header-Datei

8

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.

%Vor%

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.

    
Nathaniel 04.07.2014, 02:13
quelle

2 Antworten

5

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.

    
Abhishek Mittal 04.07.2014 02:45
quelle
3

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.

    
Pradhan 04.07.2014 03:00
quelle

Tags und Links