Déclarateurs abstraits C++
Un déclarateur abstrait est un déclarateur dans lequel l'identificateur est omis. (Pour plus d'informations, consultez Noms de types et Déclarateurs). Alors que les déclarateurs non abstraits sont utilisés dans la déclaration d'objets ou de fonctions, la suppression de l'identificateur ne laisse que les informations de type. Ainsi, les déclarateurs abstraits ont pour effet de modifier un type de base comme char de sorte qu'il spécifie un type plus complexe tel que pointeur de caractère ou tableau de caractères. En tant que tel, ils sont toujours utilisés conjointement avec un nom de type de base et utilisés uniquement pour lorsqu'un type pointeur, tableau ou référence est appelé (y compris un pointeur vers une fonction retournant ce type de base). Les déclarateurs abstraits correspondant aux éléments suivants sont présentés dans cette section :
Un déclarateur abstrait est un déclarateur qui ne déclare pas de nom ; l'identificateur est omis. Par exemple :
char *
spécifie le pointeur de type au type char. Le nom de type est composé du nom de type de base char et du déclarateur abstrait *.
De même, le déclarateur abstrait pour une référence est l'opérateur & et un type de tableau est spécifié à l'aide de crochets. Tout type peut être spécifié en appliquant simplement la syntaxe pour le déclarateur et en supprimant l'identificateur.
char & // reference to char
char[5] // array of char
Voici une utilisation plus compliquée d'un déclarateur abstrait qui déclare le pointeur de type à une fonction qui accepte deux arguments, tous deux de type char *, et retourne le type char * :
char * (*)( char *, char * )
Conjointement au spécificateur de type de base, les déclarateurs abstraits déclarent complètement un type. Les noms de types construits à partir de déclarateurs abstraits peuvent être utilisés partout où un type est nécessaire :
// 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;
Le Spécificateur typedef peut être utilisé pour éviter de répéter la syntaxe fastidieuse des déclarateurs abstraits.