Namespace

tharos

<B>namespace</b> oznacza przestrzeń nazw, w której mogą być zadeklarowane funkcje, struktury itd. Najlepiej zilustruje to przykład.

//...
namespace nazwa
{
  void funkcja_1()
  {
    //...
  }
}
//...

Aby odwołać się do składnika z danej przestrzeni nazw musimy użyć przed jego nazwą, nazwę przestrzeni, przykładowo (na podstawie powyższego):

//...

nazwa::funkcja_1();

Gdy często używamy jakichś funkcji, zmiennych z danej przestrzeni nazw możemy zrobić tak:

//....
namespace nazwa
{
  //...
}

using namespace nazwa; /* ta funkcja sprawia, że od tej pory nie musimy dopisywać do każdego elementu z przestrzeni nazwy przestrzeni oraz modyfikatora :: */
funkcja_1();
//...

Załóżmy, że mamy dwie identyczne (bądź podobne :-) ) przestrzenie nazw:

namespace First {
   void f() {}
   void g() {}        
}

namespace Second {
   void f() {}
   void g() {}         
}

Chcemy, aby pisząc instrukcję f() została wywołana funkcja z pierwszej przestrzeni nazw, a pisząc g() funkcja z drugiej przestrzeni. Należy w takim przypadku użyć deklaracji using, mianowicie:

// ...
  using First::f;    // brak słowa kluczowego namespace!
  using Second::g;
  f();    // First::f()
  g();   // Second::g() 
// ...

Po takich deklaracjach aby móc wywołać funkcję g() z przestrzeni nazw First, należy już to zrobić jawnie:

// ...
  First::g();
// ...

5 komentarzy

Jak dla mnie super wyjaśnione. Bez zbędnych komplikacji .

Toś wytłumaczył:D

Trochę krótkie i raczej kiepsko wyjaśnia, PO CO w ogóle to robić.

Tak na marginesie: po utworzeniu przestrzeni nazw nie jest potrzebny średnik :-)

eee... fajne :D

nie znałem tego