Mehrere Klassen-Dateien in ein Namespace
-
Ich habe da ein paar Klassen geschrieben, die ich gerne in einem Namespace zusammenfassen würde.
Die ich habe jeder dieser Klassen eine eigene .cpp und eine .h Datei gegeben.In den Tutorials, die ich bisher gesehen habe, wird immer aber nur beschrieben, wie ich einen Namespace in einer Datei mache.
Also so:
namespace bla { class a {...} class b {...} }
Ich hätte es aber lieber so ähnlich wie die Packages in Java - so dass ich nicht alle Klassen in eine Datei stecken muss. Wisst ihr was ich meine?
Wie machen es denn die Profis?
-
wo ist das problem? du kannst doch namespaces in jeder datei verwenden.
namespaces sind nicht auf eine datei beschränkt. -> probiers einfach mal aus
wenn du was professionelles sehen willst, schau mal in den source von Ogre rein - da siehst du, wie in (fast) jeder Datei der Namespace Ogre geöffnet und geschlossen wird.
-
Du kannst auch einfach alle includes mit einem namespace umziehen:
namsepace bla { #include "DeinDatei1.h" #include "DeinDatei2.h" #include "DeinDatei3.h" #include "DeinDatei4.h" }
ABer ich würd auch die Variante von Xantus benutzen
-
Danke!
Noch was:
Muss ich nur die Klassendeklaration (oder wie auch immer das heißt) im Header mit namespace einklammern, oder auch die Implementierung in der .cpp-Datei?//^ hat sich erledigt. Ich denke mal die Antwort wäre, dass nur die header genamespaced werden.
-
obbba schrieb:
Danke!
Noch was:
Muss ich nur die Klassendeklaration (oder wie auch immer das heißt) im Header mit namespace einklammern, oder auch die Implementierung in der .cpp-Datei?zunächst:
class Foo; //das ist die deklaration der klasse //und das ist ihre definition: class Foo { };
stell dir vor, du hast zwei klassen, die denselben namen tragen, aber in zwei unterschiedlichen namespaces liegen. wie willst du sie bei der implementierung unterscheiden?
namespace Foo { class Quux { /* ... */ }; } namespace Bar { class Quux { /* ... */ }; }
entweder, du lässt die definitionen ihrer elemente ebenfalls im namespace, oder du qualifizierst sie explizit:
namespace Foo { int Quux::fun () {} }; int Bar::Quux::fun () {}
-
obbba schrieb:
Danke!
Noch was:
Muss ich nur die Klassendeklaration (oder wie auch immer das heißt) im Header mit namespace einklammern, oder auch die Implementierung in der .cpp-Datei?//^ hat sich erledigt. Ich denke mal die Antwort wäre, dass nur die header genamespaced werden.
Nein, es wird an sich beides in den Namespace geschrieben:
H-Datei:
namespace N { class C { void F(); }; }
CPP-Datei:
namespace N { void C::F() { } }
-
ich habe über die Definition
"using namespace xyx;" geschrieben.