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...
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
.
// 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...
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 }Un ultima cosa (ovvia ?): non puoi usare un namespace se non è ancora stato definito...