C++ Abstract Declarators
An abstract declarator is a declarator in which the identifier is omitted. (For related information, see Type Names and Declarators) While non-abstract declarators are used in the declaration of objects or functions, stripping out the identifier leaves only the type information. Thus, abstract declarators have the effect of modifying a base type such as char to specify more complex type such as pointer to char or array of char. As such, they always are used in combination with a base type name and only used when a pointer, array or reference type is called for (including a pointer to function returning that base type). The abstract declarators corresponding to the following are discussed in this section:
An abstract declarator is a declarator that does not declare a name — the identifier is left out. For example,
char *
specifies the type pointer to type char. The type name consists of the base type name char plus the abstract declarator *.
Similarly, the abstract declarator for a reference is the & operator, and an array type is specified using brackets. Any type may be specified by simply applying the syntax for the declarator and removing the identifier.
char & // reference to char
char[5] // array of char
The following is a more complicated use of an abstract declarator that declares the type pointer to a function that takes two arguments, both of type char *, and returns type char *:
char * (*)( char *, char * )
In combination with the base type specifier, abstract declarators completely declare a type. The type names constructed from abstract declarators may be used anywhere a type is called for:
// 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;
The typedef Specifier may be used to avoid repeating the cumbersome syntax of abstract declarators.