Глава 9. Описатели и спецификаторы данных________________________217
миста) и функций, находящихся в API, используют typedef для назначения псевдонимов своим наиболее часто используемым типам. Пример: тип ipStr. Порывшись в заголовках, можно найти следующее определение:
typedef char far *lpStr;
Это один из примеров использования команды typedef. За ключевым словом typedef следует "настоящий" тип, а последний элемент — псевдоним. Хотя создание псевдонимов для типов, которые только с большой натяжкой можно назвать сложными, не всегда кажется необходимым, они, безусловно, повышают информативность программы.
Замечание
Заставить программистов использовать уже написанный код и придерживаться каких-либо стандартов программирования задача почти неразрешимая. Программисты склонны считать себя бунтарями.
В то же время унификация программ имеет глубокую ценность. Помимо того факта, что основным недостатком программы, написанной несколькими авторами, является ее непонятность, какое еще мерило можно приложить к созданному продукту? При отсутствии стандарта в стиле программирования становится сложно обучать новых программистов, усложняется и удорожается сопровождение программ, создание стандартизованных оценочных тестов становится затруднительным.
Программисты! Приберегите творческие порывы на решение задач и не растрачивайте их на стиль написания программ.
Другая форма typedef не так проста, как первая. Задание псевдонимов способом, описываемым ниже, слегка запутано. Глава 11 "Функции" говорит о назначении и употреблении функторов. Вкратце, функторы (functors) являются указателями на функции, позволяющими достичь гибкости при программировании, которую сложно найти в других языках. Они лежат в фундаменте операционной системы Windows.
Минусом функторов является то, что их синтаксическое представление выглядит сложным. Функторы могут обладать всеми компонентами функций, однако они являются только указателями на функции. Синтаксис таков:
return_type (*functor_name)( [argument_list]) ;
Операция разыменования привязана (скобками) к имени функтора. Все это становится еще более запутанным, когда функтор используется внутри, например, списка аргументов.
Для упрощения синтаксиса функторов можно применить typedef для создания более простого псевдонима. Основываясь на предыдущем опыте, вы можете ожидать, что спецификаторы typedef для функторов будут слеплены по образу и подобию других псевдонимов. Однако они слегка отличны.