Wenn haben wir jede praktische Verwendung für hierarchische Namespaces in C ++?

StackOverflow https://stackoverflow.com/questions/117110

  •  02-07-2019
  •  | 
  •  

Frage

kann ich die Verwendung für eine Ebene der Namensräume verstehen. Aber 3 Ebenen von Namensräumen. Sieht verrückt. Gibt es eine praktische Anwendung für das? Oder ist es nur ein Missverständnis?

War es hilfreich?

Lösung

Hierarchische Namensräume haben eine Anwendung, dass sie zunehmend verfeinerten Definitionen erlauben haben. Sicherlich ein einzelner Anbieter kann zwei Klassen mit demselben Namen erzeugen. Oft ist die erste Ebene durch den Firmennamen belegt ist, gibt die zweite Produkt, die dritte (und möglicherweise mehr) meint die Domain bieten.

Es gibt auch andere Verwendungen von Namespace Segregation. Eine beliebte Situation Platzierung der Basisklassen für eine Fabrik Muster in seinem eigenen Namensraum und dann abgeleitete Fabriken in ihrem eigenen Namensraum durch Anbieter. Z.B. System.Data, System.Data.SqlClient und System.Data.OleDbClient.

Andere Tipps

Natürlich ist es eine Frage der Stellungnahme. Aber es läuft wirklich auf die Organisation nach unten. Zum Beispiel habe ich ein Projekt, das ein Plugin api hat die Funktionen / Objekte hat, die etwa wie folgt aussehen:

plugins::v1::function

Wenn 2.0 wird ausgerollt werden sie setzen in den v2 Unternamensraum werden. Ich plane nur deprecate aber nie v1 Mitglieder zu entfernen, die schön Rückwärtskompatibilität in Zukunft unterstützen sollte. Dies ist nur ein Beispiel für eine „vernünftige“ usage. Ich stelle mir einige Leute unterscheiden, aber wie ich schon sagte, es ist eine Frage der Stellungnahme.

Big Codebases wird es brauchen. Schauen Sie sich Schub für ein Beispiel. Ich glaube nicht, dass jemand den Boost-Code nennen würde ‚verrückt‘.

Wenn Sie die Tatsache, dass zu jeder Ebene einer Hierarchie, die Menschen nur irgendwo ganz grob in der Größenordnung von 10 Stück begreifen können, dann zwei Ebenen gibt Ihnen nur 100 maximal. Ein ausreichend großes Projekt wird mehr brauchen, so kann leicht 3 Ebenen tief enden.

Ich arbeite auf XXX Anwendung in meiner Firma yyy, und ich bin ein GUI-Subsystem zu schreiben. So verwende ich yyy :: xxx :: gui als mein Namespace.

Sie können ganz einfach, sich in einer Situation befinden, wenn Sie mehr als eine Ebene benötigen. Zum Beispiel hat Ihr Unternehmen einen riesigen Namensraum für alle seine Codes es von Dritten Code zu trennen, und Sie schreiben eine Bibliothek, die Sie in einem eigenen Namensraum setzen wollen. Im Allgemeinen, wenn Sie ein sehr großes und komplexes System haben, die hierarchisch gegliedert ist, ist es sinnvoll, mehrere Namespace-Ebene zu verwenden.

Es hängt von Ihren Bedürfnissen und Programmierstil. Aber einer der Vorteile von namespace ist Partitionsnamen Raum zu helfen, (daher der Name). Mit einem einzigen Namensraum, wie Ihr Projekt erhöht sich in Größe und Komplexität, nimmt auch die Wahrscheinlichkeit von Namenskollision.

Wenn Sie Code schreiben, die gemeinsam genutzt werden oder wiederverwendet gemeint ist, wird dies sogar noch wichtiger.

Ich bin damit einverstanden für Anwendungen. Die meisten Menschen, die mehrere Ebenen von Namensräumen verwenden (in meiner Erfahrung) stammen aus einer Java- oder .NET-Hintergrund, wo der Lärm deutlich geringer ist. Ich finde, dass eine gute Klasse Präfixe an die Stelle von mehreren Ebenen von Namensräumen stattfinden kann.

Aber ich habe gute Verwendung von mehrere Namensraum Ebenen in Boost (und anderen Bibliotheken) zu sehen. Alles ist im Boost-Namespace, aber Bibliotheken sind erlaubt (ermutigt?) In ihrem eigenen Namensraum zu sein. Zum Beispiel - boost :: this_thread Namespace. Es ermöglicht Dinge wie ...

boost::this_thread::get_id()
boost::this_thread::interruption_requested()

„this_thread“ ist nur ein Namensraum für eine Sammlung von kostenlosen Funktionen. Sie könnten das gleiche mit einer Klasse und statischen Funktionen tun (das heißt die Java Art und Weise eine freie Funktion zu definieren), aber warum unnatürlich etwas tun, wenn die Sprache hat eine natürliche Art und Weise, es zu tun?

Gerade in der Basisklassenbibliothek .NET eine Namespace-Hierarchie zu sehen, für einen guten Zweck. Es geht vier oder fünf Ebenen tief in ein paar Plätze, aber es ist meist nur zwei oder drei, und die Organisation ist sehr schön für Dinge zu finden.

Je größer die Codebasis desto größer ist die Notwendigkeit für die hierarchische Namensräume. Als Ihr Projekt größer und größer wird feststellen, dass Sie es in einer Weise brechen müssen, um es zu stopfen zu erleichtern zu finden.

Zum Beispiel verwenden wir derzeit eine 2 Level-Hierarchie. Jedoch einige der größeren Portionen wir jetzt sprechen über sie in 3 Ebenen ausbricht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top