Ich bin von C ++ zu Java und C # gewechselt und denke, dass die Verwendung von Namespaces / Paketen dort viel besser ist (gut strukturiert). Dann bin ich zu C ++ zurückgekehrt und habe versucht, Namespaces auf die gleiche Weise zu verwenden, aber die erforderliche Syntax in der Header-Datei ist schrecklich.
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
Folgendes erscheint mir ebenfalls seltsam (um den tiefen Einzug zu vermeiden):
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
{
Gibt es eine kürzere Möglichkeit, das oben Gesagte auszudrücken? Mir fehlt so etwas
namespace MyCompany::MyModule::MyModulePart::...
{
public class MyClass
Aktualisieren
Ok, einige sagen, dass das Konzept der Verwendung in Java / C # und C ++ unterschiedlich ist. "Ja wirklich?" Ich denke, dass das (dynamische) Laden von Klassen nicht der einzige Zweck für Namespaces ist (dies ist eine sehr technisch begründete Perspektive). Warum sollte ich es nicht für eine Lesbarkeit und Strukturierung verwenden, z. B. an "IntelliSense" denken?
Derzeit gibt es keine Logik / Kleber zwischen einem Namespace und dem, was Sie dort finden können. Java und C # machen das viel besser ... Warum <iostream>
Namespace einschließen und haben std
? Ok, wenn Sie sagen, die Logik sollte sich auf den einzuschließenden Header stützen, warum verwendet das #include keine "IntelliSense" -freundliche Syntax wie #include <std::io::stream>
oder <std/io/stream>
? Ich denke, die fehlende Strukturierung in den Standardbibliotheken ist eine Schwäche von C ++ im Vergleich zu Java / C #.
Wenn die Eindeutigkeit für eifrige Konflikte ein Punkt ist (was auch ein Punkt von C # und Java ist), ist es eine gute Idee, den Projekt- oder Firmennamen als Namespace zu verwenden, finden Sie das nicht?
Einerseits heißt es, C ++ sei am flexibelsten ... aber alle sagten "mach das nicht"? Es scheint mir, dass C ++ viele Dinge kann, aber eine schreckliche Syntax hat, selbst für die einfachsten Dinge in vielen Fällen im Vergleich zu C #.
Update 2
Die meisten Benutzer sagen, es sei Unsinn, eine tiefere Verschachtelung als zwei Ebenen zu erstellen. Ok, was ist mit Windows :: UI :: Xaml und Windows :: UI :: Xaml :: Controls :: Primitives-Namespaces in der Win8-Entwicklung? Ich denke, die Verwendung von Namespaces durch Microsoft ist sinnvoll und in der Tat tiefer als nur 2 Ebenen. Ich denke, größere Bibliotheken / Projekte benötigen eine tiefere Verschachtelung (ich hasse Klassennamen wie ExtraLongClassNameBecauseEveryThingIsInTheSameNameSpace ... dann könnten Sie auch alles in den globalen Namespace einfügen.)
Update 3 - Fazit
Die meisten sagen "Tu es nicht", aber ... selbst Boost hat eine tiefere Verschachtelung als ein oder zwei Level. Ja, es ist eine Bibliothek, aber: Wenn Sie wiederverwendbaren Code möchten, behandeln Sie Ihren eigenen Code wie eine Bibliothek, die Sie jemand anderem geben würden. Ich verwende auch eine tiefere Verschachtelung für Erkennungszwecke unter Verwendung von Namespaces.
namespace
Schlüsselwörtern?