Cerca nel sito:
ricerca
avanzata

Frasi Celebri...

Questo bacio sar? dolce alla tua bocca, il prossimo al mio cuore.

Anonimo 

Sondaggio:

La Ferrari ?...

Una leggenda
La storia
Schumacher
L'auto per eccellenza
Un sogno

visualizza risultati


 

La direttiva using

Qualificare totalmente gli identificatori appartenenti ad un namespace puo` essere molto noioso, soprattutto se siamo sicuri che non ci sono conflitti con altri namespace. In questi casi ci viene in aiuto la direttiva using, che abbiamo gia` visto in numerosi esempi:

 

#include "MikeLib.h"
using namespace MikeLib;
using namespace SamLib;

/* ... */

 

La direttiva using utilizzata in congiunzione con la keyword importa in un colpo solo tutti gli identificatori del namespace specificato nello scope in cui appare la direttiva (che puo` anche trovarsi nel corpo di una funzione):

 

#include "MikeLib.h"
#include "SamLib.h"

using namespace MikeLib;
// Da questo momento in poi non e` necessario
// qualificare i nomi del namespace MikeLib

void MyFunc() {
  using namespace SamLib;
  // Adesso in non bisogna qualificare
  // neanche i nomi di SamLib

  /* ... */
}
// Ora i nomi di SamLib devono
// essere nuovamente qualificati con ::

/* ... */

 

Naturalmente se dopo la using ci fosse una nuova definizione di identificatore del namespace importato, quest'ultima nasconderebbe quella del namespace. L'identificatore del namespace sarebbe comunque ancora raggiungibile qualificandolo totalmente:

 

#include "SamLib.h"
using namespace SamLib;

int Pi = 5;             // Nasconde la definizione
                        // presente in SamLib

int a = Pi;             // Riferisce al precedente Pi

double b = SamLib::Pi;  // Pi di samLib

 

Se piu` direttive using namespace fanno si` che uno stesso nome venga importato da namespace diversi, si viene a creare una potenziale situazione di ambiguita` che diviene visibile (genera cioe` un errore) solo nel momento in cui ci si riferisce a quel nome. In questi casi per risolvere l'ambiguita` basta ricorrere ricorrere al risolutore di scope (::) qualificando totalmente il nome.

E` anche possibile usare la using per importare singoli nomi:

 

#include "SamLib.h"
#include "MikeLib"
using namespace MikeLib;
using SamLib::Sum(int, int);

void F() {
  PiType a = Pi;       // Riferisce a MikeLib
  int r = Sum(5, 4);   // SamLib::Sum(int, int)
}

 

 

 

successivo
–«  INDICE  »–

 

 

 

 
Powered by paper&pencil (carta&matita ) - Copyright © 2001-2019 Cataldo Sasso