Глава 11. Функции__________________________________________265
Функторы широко используются для реализации механизма обратного вызова (callback) в программах для Windows и Windows 95. При обратном вызове функции передается функтор — указатель на другую функцию, с тем, чтобы по этому указателю функцию можно было при необходимости вызвать. Аналогичным образом функторы используются для создания систем динамических меню. Процедуры обработки прерываний также являются функторами: обработчик прерывания устанавливается путем размещения адреса процедуры в таблице векторов прерываний. Работа резидентных (Terminate and Stay Resident, TSR) программ обеспечивается именно благодаря обработчикам прерываний и функторам.
Терминология
Представленные ниже термины знать необязательно, однако нелишне привести здесь краткие толкования некоторых из них.
Прерывание (interrupt) — Микропроцессор вашего компьютера анализирует и исполняет машинные команды (именно в таком виде представляются программы после компиляции). В конце каждого цикла микропроцессор проверяет, не установлен ли флаг прерывания в регистре*флагов, т. е. нет ли чего-то, что необходимо немедленно выполнить. Если этот флаг установлен, то процессор определяет номер прерывания и по этому номеру находит соответствующий "пункт" в таблице векторов прерываний, расположенной в памяти по адресу от 0:0 до 0:400 (шестнадцатеричное). В этом месте находится адрес процедуры ROM BIOS или какого-то другого драйвера (типа lo.sys или Msdos.sys), которые и должны отреагировать на прерывание соответствующим образом.
Таблица векторов прерываний (interrupt vector table) — Массив функторов, загруженный в память программными или аппаратными драйверами.
Обработчик прерывания (interrupt handler) — Функция, содержащая необходимый для обработки прерываний код.
TSR (Terminate and Stay Resident) — Это программы, остающиеся в памяти после видимого прекращения своей работы. Функтор используется для создания обработчика прерывания (обычно для реакции на управляющие клавиши) и обеспечивает "всплытие" резидентной программы во время работы других программ.
Вот вкратце те ниши, где функторы могут найти себе применение. Вряд ли, прочтя этот раздел, вы сразу станете крупным специалистом по функторам, но у вас должно остаться ясное представление о том, что это такое и зачем это нужно.
На что похож функтор
t
Функтор с виду очень похож на функцию, возвращающую указатель на переменную. Практически во всех остальных отношениях они выглядят как обыкновенные функции. Им доступно все то же многообразие возвращаемых типов, имен и параметров. Различие заключается в наличии связанной с именем функции операции разыменования (*):