namespace?!? non è .NET?
Per .NET c'è un subforum.
No i namespace ci sono anche in C++ (in .NET non lo so
) t posto direttamente un tratto di testo non mio che lo spiega abbastanza chiaramente così non mi spreco ad inventarmi esempi
:
Questo concetto è la risposta al comune problema delle definizioni multiple. Immagina di avere due file header che descrivono due tipi differenti, ma che hanno lo stesso nome. Come facciamo ad utilizzarli entrambi ?
La risposta in C++ sta nei namespace. Si definiscono tipi e funzioni in un namespace e dopo li si usano. I namespace sono definiti usando la parola riservata namespace, seguita da un identificatore. Ma vediamo subito un esempio...
codice:
namespace Geometry
{
struct Vector
{
float x, y;
};
float Norm (Vector v);
}
In questo esempio, quello che c'è dentro le {} è normale codice C++. Per usare questo codice, devi specificare al compilatore che adesso stai per usare il namespace geometry. Ci sono due modi di fare questo: specificando per una singola variabile il suo namespace (la sintassi è namespace::variabile) o usando la sequenza di parole riservate using namespace.
codice:
// Esempio con ::
void Foo1()
{
Geometry::Vector v = {1.0, 2.0};
float f = Geometry::Norm (v);
}
// Con l'uso delle parole chiave "using namespace"
using namespace Geometry;
void Foo2()
{
Vector v = {1.0, 2.0};
float f = Norm (v);
}
Quando usi la sequenza using namespace, potresti avere dei problemi se due o più namespace definiscono lo stesso tipo. Se c'è del codice ambiguo, il compilatore non lo compilerà. Per esempio...
codice:
namespace Geometry
{
struct Vector
{
float x, y;
};
}
namespace Transport
{
struct Vector
{
float speed;
};
}
using namespace Geometry;
using namespace Transport;
void foo()
{
Vector v0; // Errore: ambiguità
Geometry::Vector v1; // OK
Transport::Vector v2; // OK
}
Mi sembra piuttosto chiaro,ciao