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();
// ...
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