Dichiaratori astratti C++
Un dichiaratore astratto è un dichiaratore in cui l'identificatore viene omesso. (Per informazioni correlate, vedere Nomi dei tipi e Dichiaratori) Mentre i dichiaratori non astratti vengono utilizzati nella dichiarazione di oggetti o funzioni, la rimozione dell'identificatore lascia solo le informazioni sul tipo. Pertanto, i dichiaratori astratti hanno l'effetto di modificare un tipo di base come char per specificare tipi più complessi come il puntatore a char o matrice di char. Per questa ragione, vengono utilizzati sempre in combinazione con un nome di tipo di base e utilizzati solo quando un puntatore, una matrice o un tipo di riferimento viene chiamato (incluso un puntatore a funzione che restituisce quel tipo di base). I dichiaratori astratti che corrispondono a quello riportato di seguito vengono illustrati in questa sezione:
Un dichiaratore astratto è un dichiaratore che non dichiara un nome - l'identificatore viene omesso. Di seguito è riportato un esempio:
char *
specifica il tipo puntatore a tipo char. Il nome del tipo è costituito dal nome del tipo di base char più il dichiaratore astratto *.
Analogamente, il dichiaratore astratto per un riferimento è l'operatore & e un tipo matrice viene specificato utilizzando le parentesi. Qualsiasi tipo può essere specificato solo applicando la sintassi per il dichiaratore e rimuovendo l'identificatore.
char & // reference to char
char[5] // array of char
Di seguito è riportato un utilizzo più complesso di un dichiaratore astratto che dichiara il tipo puntatore a una funzione che accetta due argomenti, entrambi di tipo char * e restituisce il tipo char *:
char * (*)( char *, char * )
In combinazione con l'identificatore del tipo di base, i dichiaratori astratti dichiarano completamente un tipo. I nomi dei tipi costruiti da dichiaratori astratti possono essere utilizzati ovunque viene chiamato un tipo:
// Get the size of array of 10 pointers to type char.
size_t nSize = sizeof( char *[10] );
// cast fptr to pointer to function that takes two arguments, both of type
// pointer to char
i = (char * (*)(char*, char*)) fptr;
L'identificatore typedef può essere utilizzato per evitare di ripetere la sintassi complessa dei dichiaratori astratti.