In einer C ++ - Implementierungsdatei habe ich die Möglichkeit, etwas zu schreiben wie:
%Vor%statt
%Vor%was ich sehr praktisch und besser lesbar finde. Kann das irgendwie auch in Header-Dateien verwendet werden? Etwas wie das:
%Vor%statt
%Vor% Wenn so etwas möglich ist, unter welchen Bedingungen? Ich könnte mir vorstellen, dass man forward den Namespace nach vorne deklarieren muss, um die Klassen im Namespace wie folgt zu deklarieren:
bevor Sie das verwenden können:
%Vor%in einer Header-Datei.
Aber irgendwie kann ich das nicht zur Arbeit bringen 1] . Ist es überhaupt möglich? Was mich stört ist, dass ich bei verschachtelten Namespaces 2 Tabulatoren einrücken muss, bis ich meine Klasse deklarieren kann. Ich möchte diesen Platz in meinen Header-Dateien verwenden, aber ich möchte die Tabs nicht weglassen, da dies gegen die "alles in geschweiften Klammern muss einmal Tabbed" -Rule sein würde (ich weiß nicht, ob es da ist ein richtiger Name für das. Wenn es, entschuldigen Sie meine Unwissenheit, ich kenne keine: S
1] Das Problem, mit dem ich konfrontiert war, war nicht mit der Frage verbunden. Der Ansatz funktioniert tatsächlich, hat aber Nachteile (siehe akzeptierte Antwort).
Wenn Sie nicht möchten, dass die Namespace-Klammern Ihre Klassendefinition einschließen, können Sie dies sicher erreichen, indem Sie den Namespace woanders nur mit der darin enthaltenen Klassendeklaration definieren. Auf diese Weise können Sie sich etwas einfallen lassen:
%Vor%für den Header und das:
%Vor%für die Implementierung.
Wie Sie sehen, umschließt der Namespace nicht die Klassendefinition, sondern nur seine Deklaration.
Als letzte Anmerkung weiß ich persönlich nicht, warum Sie das tun wollen oder denken, es sieht besser aus, es zu lesen. Ich persönlich würde eher sehen, dass der Namensraum die Klassendefinition sowie die Funktionsdefinitionen kapselt. Aber vielleicht war ich die ganze Zeit schon komisch ...
Nein, es funktioniert nicht. Ein Problem ist das mit
%Vor%Sie können sagen, dass es zwei Namespaces und eine Klasse ist.
Allerdings mit
%Vor% Sie können nicht feststellen, ob space
ein Namespace oder eine Klasse ist, die eine verschachtelte ClassName
enthält.
Was Sie können tun, ist das Speichern auf Ihrem Tab. Es ist möglich,
zu schreiben %Vor%Was Sie suchen, funktioniert nicht.
Eine Erklärung ist, dass alle Typen C ++ class
und struct
implizit ihrem eigenen Namensraum zugeordnet sind (der denselben Namen wie die Klasse hat).
Also, gegeben
%Vor% Der Compiler hat keine Möglichkeit festzustellen, ob name
und space
tatsächlich Namespaces oder Klassen sind (im besten Fall muss daraus geschlossen werden, dass das Konstrukt nicht eindeutig ist). Dem Compiler muss also explizit gesagt werden, dass name
ein Namespace ist, dass space
ein Namespace innerhalb von name
ist, bevor man sagt, dass ClassName
eine Klasse in ihnen ist.
Daher die Notwendigkeit für
%Vor% zum Weiterleiten geben Sie beide Namespaces an und leiten Sie die Deklaration ClassName
in ihnen weiter.
Nein, das ist nicht möglich. Die einzige Möglichkeit, einen Namespace zu definieren, ist die Verwendung des Schlüsselworts namespace
in Kombination mit geschweiften Klammern.
7.3.1 Namensraumdefinition [namespace.def]
1 Die Grammatik für eine Namensraumdefinition ist
%Vor%
Sie können Namespace-Member außerhalb des Namespace definieren, obwohl sie innerhalb von namespace
(Hervorhebung von mir) deklariert wurden:
7.3.1.2 Namensraum-Memberdefinitionen [namespace.memdef]
2 Mitglieder eines benannten Namespace können auch außerhalb dieses Namespaces durch explizite Qualifizierung (<3.4.3.2>) definiert werden des Namens, der definiert wird, vorausgesetzt, dass die zu definierende Entität bereits im Namespace deklariert wurde Die Definition wird nach dem Deklarationspunkt in einem Namespace angezeigt, der die Deklaration umschließt Namensraum.
Wenn Sie
schreiben %Vor% Sie deklarieren keine class ClassName
in namespace space
, Sie geben nur eine Vorwärtsdeklaration .
Tags und Links c++