D
aber schrieb:
Badestrand schrieb:
aber schrieb:
also ist der einzige Grund, dass man es nicht so machen will wie in Java oder gibts noch nen richtigen?
Nein, mit Java hat das nichts zu tun. Wenn man eine Klasse entwickelt, sollte es für den Nutzer so wenig Möglichkeiten zum falsch-machen geben wie nur mögich. In den allermeisten Fällen sind Klassen dafür da, um Instanzen von ihnen erstellen zu können (oder sie abstrakter referenzieren zu können, im Fall von Basisklassen). Und Namensräume werden genutzt, um Funktionalitäten zu gruppieren. Die QToolTip-Klasse gruppiert mit einer Klasse, von der man keine Instanzen erstellen kann/soll. Das ist unintuitiv und deshalb verwirrend. Und Verwirrung will wohl keiner
Dann ist aber doch der Namensraum std ein schlechtes Beispiel für die Verwendung von Namensräumen. Im prinzip gruppiert er nichts, sondern wirft alles von Algorithmen über Container bis Streams in einen Topf. Warum gibts da keine unterschiedlichen Namensräume?
Ich verstehe Namespaces ein bischen anders. Ihr primäres Ziel ist es, die Eindeutigkeit von C++-Bezeichnern zu gewährleisten. Es soll also beispielsweise gewährleistet werden, dass man problemlos Librarys zwei verschiedener Hersteller (oder meinetwegen die STL und eine weitere Library) verwenden kann, ohne dass man Ärger mit Compiler oder Linker kriegt, weil beide Libs denselben Namen, etwa einer Klasse, verwenden.
Man kann natürlich hergehen und Namespaces zur Gruppierung verwenden, wie etwa boost es macht. Vielleicht ist das sogar eine gute Idee, aber wichtig oder gar entscheidend ist das nicht. Eine Gruppierung per Klasse, wie mit dem gezeigten Beispiel ist in meinen Augen völlig in Ordnung und eine akzeptable Design-Entscheidung.
Stefan.