Абстрактные деклараторы в C++

Абстрактный декларатор — это декларатор, в котором не указан идентификатор. (Дополнительные сведения см. в разделах Имена типов и Деклараторы). Неабстрактные деклараторы используются при объявлении объектов и функций. Если убрать из декларатора идентификатор, остается только информация о типе. Таким образом, абстрактные деклараторы изменяют базовый тип (например, char) для определения более сложного типа (например, указателя на char или массива char). Как таковые, они всегда используются в сочетании с именем базового типа и только в том случае, если требуется тип указателя, массива или ссылки (включая указатель на функцию, возвращающую данный базовый тип). В этом разделе рассматриваются абстрактные деклараторы, соответствующие следующему списку:

Абстрактный декларатор не объявляет имя — идентификатор отсутствует. Например:

char * 

определяет тип указателя на тип char. Имя типа состоит из имени базового типа char и абстрактного декларатора *.

Аналогично, абстрактный декларатор для ссылки представляет собой оператор &, а тип массива определяется с помощью квадратных скобок. Любой тип можно указать, просто применив синтаксис декларатора и удалив идентификатор.

char &   // reference to char
char[5] // array of char

Ниже показано более сложное использование абстрактного декларатора, который объявляет тип указателя на функцию, принимающую два аргумента, оба типа char *, и возвращающую тип char *:

char * (*)( char *, char * )

В сочетании со спецификатором базового типа абстрактные деклараторы полностью объявляют тип. Имена типов, сформированных из абстрактных деклараторов, могут использоваться в любом месте, в котором требуется этот тип:

// 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; 

Во избежание многократного повторного использования сложного синтаксиса абстрактных деклараторов можно использовать спецификатор typedef.

См. также

Ссылки

Деклараторы