четверг, 14 ноября 2013 г.

«Обернутые» функции в Free Pascal

Бывает, требуется множество подпрограмм единообразно обернуть — добавить им всем одинаковое начало и завершение или, что более интересно, выполнить их в блоке „try ... except“ с каким-нибудь фильтром на исключения... Вообще, понятно, что FPC поддерживает процедурные типы, но как раз типы тут могут быть самые разные, а нетипизированный вызов с ручной установкой стека — это потенциальный неиссякаемый источник трудноуловимых ошибок.

Тут самое время вспомнить, что FPC с некоторых пор поддерживает еще и вложенные процедурные типы, а вложенная процедура имеет доступ ко всей области видимости внешней, включая, естественно, аргументы и псевдопеременную result.

Соответственно, можно вынести все действия подпрограммы во вложенную процедуру без параметров, а в основной блок вставить вызов «оборачивателя» с этой вложенной процедурой. Пример ниже.

Определение обертки

Выводим на консоль исключение, если оно произошло, с пометкой времени.

Замечу, что полученное исключение мы отправляем далее по стеку, не подавляем.

Использование

Комментариев нет:

Отправить комментарий