STL-Newbie weiß nich was namespaces sind



  • Hallo,
    ich arbeite mich grad in die Welt von STL ein (hab bis jetz immer meine verkettete Liste per Hand programmiert... 🙄 ) und bin begeistert von den Möglichkeiten...

    Naja, zum Thema: Überall wo ich was über STL les, steht was über namespaces, aber so wirklich weiß ich damit nicht anzufangen und ne gute Erklärung hab ich auch nicht gefunden... Bis jetzt hab ich das nie "per Hand" benutzt...

    Als ich z.B. in meine Klasse eine list als member einfügen wollte musste ich schreiben:

    std::list<char> coll;
    

    Ich weiß das mit std hat was mit namespaces zu tun, aber könnte mir das mal jmd ausführlich erklären? Danke.



  • Ausführliche Erklärungen findest du in jedem C++ Einsteigerbuch, hier nur mal fürs anschauliche Verständnis:

    namespace Bashar {
      class Fubar {
        // ...
      };
      void quux();
    }
    
    int main() {
      Fubar f; // mööp: Klasse unbekannt
      Bashar::Fubar f; // aha!
    }
    
    // Alternative:
    int main() {
      // using-Deklaration:
      using Bashar::Fubar;
      Fubar f; // ok
      quux(); // mööp
    }
    
    // noch ne Alternative:
    int main() {
      // using-Direktive:
      using namespace Bashar;
      Fubar f; // ok
      quux(); // ok
    }
    

    Und die ganze Standardlibrary liegt im Namespace std, mit dem du genauso arbeitest wie ich oben mit meinem Namensraum. Unbenannte Namensräume, Aliasnamen und Koenig-Lookup lass ich an der Stelle mal weg.





  • Was ist der Sinn des ganzen? Damit kann man sehr schön Namenskonflikte vermeiden.

    Sagen wir mal du bastels eine Klasse

    class Datum
    

    , und jemand anderes auch eine Klasse mit gleichem Namen, dann würdest du deine Klasse in den

    namespace Cosmixx
    

    legen, und der andere Entwickler/Firma in seinen eigenen Namensraum, z.B.

    namespace SapAG
    

    Wenn du also beide Klassen bei dir im Projekt includierst, kannst du per Namensraum-Angabe die gewünschte Klasse nutzen, ohne einen Namenskonflickt zwischen beiden Klassen zu bekommen. So weiß der Compiler trotz gleichnamiger Klassen, welche Klasse du wo benutzen willst. Ist doch ne feine Sache, oder? 😃


Anmelden zum Antworten