Ада-95. Компилятор GNAT



         

Ссылочные типы для подпрограмм


Также как и обобщенные ссылочные типы, ссылочные типы для подпрограмм не доступны в стандарте Ada83.

Они являются нововведением, которое определил выход стандарта Ada95.

Ссылочные типы для подпрограмм позволяют использовать подпрограммы как параметры передаваемые другим подпрограммам (например, так как это делается в математических библиотеках Фортрана), а также осуществлять позднее связывание.

При описании ссылочных типов для подпрограмм следует придерживаться следующих соглашений:

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

  • при описании ссылочного типа для функции, тип возвращаемого значения должен соответствовать типу возвращаемого значения функции на которую будут ссылаться значения этого типа

  • переменные ссылочного типа для подпрограмм могут быть использованы для доступа к любой подпрограмме профиль которой соответствует профилю определеному при описании этого ссылочного типа

    Простейшим примером использования функционального ссылочного типа как параметра подпрограммы может служить следующий фрагмент кода:

    type Access_Function is access function(Item: in Float) return Float;

    type Vector is array (Integer range < >) of Float;

    procedure For_Each( F : in Access_Function; To: in out Vector ) is

    begin

    for I in To'Range loop

    To(I) := F( To(I) ); end loop; end For_Each;

    Здесь, процедура For_Each принимает в качестве параметра F

    значение ссылочного типа Access_Function указывющее на функцию, которую необходимо вызывать при обработке каждого элемента массива типа Vector, передаваемого ей как параметр To.

    Примечательно, что при вызове функции F расшифровка ссылки производится автоматически. Следует также заметить, что вместо "F( To(I) )" можно было бы написать "F.all( To(I) )", что в подобных случаях - не обязательно.

    Использование .all требуется когда вызываемая подпрограмма (процедура или функция) не имеет параметров.




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