Cerca nel sito:
ricerca
avanzata

Frasi Celebri...

Nelle donne ogni cosa ? cuore - anche la testa.

J.P.Ritcher 

Sondaggio:

Quale telegiornalista trasmette pi? carica erotica?

M.Grazia Capulli
Lilli Gruber
Benedetta Parodi
Siria Magri
Tiziana Ferrario
M.Concetta Mattei
Tutte, anche quelle non elencate

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-2022 Cataldo Sasso