27. Дескрипторы функций

В скриптах поддерживается такой вид дескрипторов, как дескрипторы функций, которые можно передавать в качестве параметров других функций и методов.
Из-за строгой типизации в AngelScript для этого необходимо сначала при помощи ключевого слова funcdef объявить тип функции, дескриптор которой предполагается использовать.
Любая функция будет принадлежать объявленному типу, если совпадает число и типы аргументов и тип возвращаемого значения.
Пример объявления типа my_function_type:
funcdef void my_function_type();
Объявленный таким образом тип можно использовать так же, как и любой спецификатор типа.
Для того чтобы объявить дескриптор функции достаточно к спецификатору типа добавить символ @ («собака»).
Пример передачи дескриптора функции в качестве параметра другой функции:
// Объявление типа функции.
funcdef void my_function_type();
// Принимает дескриптор функции в качестве первого параметра.
void do_n_times(my_function_type@ what, uint n)
{
for(uint i=0; i {
what();
}
}
// Дескриптор этой функции будет передан
// в качестве параметра.
void print_a_message1 ()
{
alert("Сообщение #1", "");
}
// Ещё одна функция, дескриптор которой
// будет передан в качестве параметра.
void print_a_message1 ()
{
alert("Сообщение #2", "");
}

// Главная функция скрипта.
void main()
{
do_n_times(print_a_message1, 3);
do_n_times(print_a_message2, 5);
}

Назад | Содержание | Вперёд

Поделитесь с друзьями

WordPress Lessons