2010-01-25 6 views
15

Ich verstehe die Probleme, die Sie bekommen können, wenn Sie eine using Deklaration in eine Header-Datei setzen, also möchte ich das nicht tun. Stattdessen habe ich versucht, die using (oder eine namespace foo =) innerhalb der Klassendeklaration zu setzen, um die wiederholte Eingabe innerhalb der Header-Datei zu reduzieren. Leider bekomme ich Compilerfehler. Es scheint, als wäre es ein nützliches Feature.Warum kann ich eine "using" -Deklaration nicht in eine Klassendeklaration einfügen?

Im realen Code sind die Namespace-Namen viel länger und ärgerlicher und ich kann das nicht ändern.

Kann jemand erklären, warum dies nicht legal ist, oder (besser) wenn es einen Workaround gibt?

Antwort

21

Können Sie typedef gee::whiz::abc::def::Hello Hello tun?

+2

Dies wird immer noch den Namespace verschmutzen, was er zu vermeiden versucht. – Trent

+6

Nicht, wenn es innerhalb der Klassendeklaration verwendet wird. –

+0

Ja, das funktioniert! Und wenn ich es zu einem privaten typedef mache, kann anderer Code es nicht versehentlich verwenden. – Dan

4

eigentlich keine völlig entsetzliche Idee. Es macht mindestens so viel Sinn wie es jetzt funktioniert (was gewährt, ist nicht viel). Ich denke, das grundlegende Problem ist, dass Klassen nicht die Einheit der Kompilierung und Verknüpfung sind, sondern "Übersetzungseinheiten". Aber Klasse für Klasse zu tun ist viel sauberer, da Klassen Module sind, wie in Java oder C# oder anderen Sprachen, die mehr Sinn ergeben.

1

Hatte das gleiche Problem, diese Frage gefunden. Ich fand heraus, dass, wenn Sie struct foo mit einem anonymen Namensraum umhüllen, es scheint, dass Sie setzen können

using Namensraum auch :: viele :: Namen;

an der Spitze des anonymen Wrappers. Es ist jedoch etwas hässlich, mehr Ebenen verschachtelter Klammern hinzuzufügen.

+0

Hmm ... aber dann haben Sie einen Anon-Namespace in einer Header-Datei. Nicht sicher, dass ich diese Dose Würmer öffnen möchte: http://stackoverflow.com/questions/357404/anonymous-namespaces http://stackoverflow.com/questions/357564/uses-for-anonymous-namespaces-in-header- Dateien – Dan

+0

Ich verstehe, dass das Design von Namespaces eines der Reue aus einer vorherigen Standardisierungsrunde war, da es ohne viel Implementierungserfahrung vollgestopft wurde. Ich habe in letzter Zeit hauptsächlich Boost-Header-Bibliotheken verwendet, also schien dies in einem fünfminütigen Experiment OK zu sein. –

+0

http://www.drdobbs.com/184401782 –