Einen Namensraum anlegen

Ein Namensraum ist im Prinzip wie eine Klasse, die nur statische Elemente besitzt. Man kann keine Instanzen von Namensräumen anlegen, somit sind alle Elemente eines Namensraums grundsätzlich statisch. Wenn man keinen Namensraum definiert, so befindet man sich im globalen Namensraum. Dort werden auch globale Variablen abgelegt und auch hier muss das Schlüsselwort static nicht verwendet werden - es ist grundsätzlich nur eine Instanz der Variablen vorhanden.

Entsprechend ist ein Namespace ähnlich aufzubauen, wie eine Klasse und genauso wie man im globalen Namensraum Variablen, statische Funktionen und Klassen erstellen darf, ist all dies auch in einem eigenen Namensraum möglich:

namespace MyProjekt
{
  int staticVariable;
 
  int staticFunction( int value )
  {
    return value * 2;
  }
 
  class Token
  {
    int Value; 
 
    public:
      Token() : Value( 0 ) {}
  };
}

Aber auch Namespaces sind nicht ausgeschlossen:

namespace MyCompany
{
  namespace MyProject
  {
    /* ... */
  }  
}

Leider ist es nicht möglich, namespace-Anweisungen in dieser Form zusammen zu fassen:

namespace MyCompany::MyProject
{
  // Dies ist _NICHT_ möglich
)

Im Folgenden werden wir uns ansehen, wie man auf die einzelnen Elemente zugreift.