Subprogramas como parámetros formales genéricos

Explicación

Se utiliza la palabra with precediendo al protocolo del subprograma que se espera. Se puede especificar un nombre por defecto para el subprograma pasado por parámetro, utilizando "is <nombre>". Si se quiere que el nombre por defecto sea el mismo que el del parámetro formal, se pondrá como nombre "<>". En caso de especificar un nombre por defecto se podrá omitir el parámetro al instanciar la unidad.

Sintaxis

formal_subprogram_declaration ::= formal_concrete_subprogram_declaration
   | formal_abstract_subprogram_declaration

formal_concrete_subprogram_declaration ::=
   with subprogram_specification [is subprogram_default];

formal_abstract_subprogram_declaration ::=
   with subprogram_specification is abstract [subprogram_default];

subprogram_default ::= default_name | <> | null

default_name ::= name

Ejemplo

generic
   type Elemento is private; 
   --  Un procedimiento con un parámetro de tipo Elemento
   with procedure Acción(X : in Elemento);
   --  Un procedimiento con un parámetro de tipo Elemento cuyo
   --  nombre por omisión es Escribir 
   with procedure Acción (X : in Elemento) is Escribir;

   --  Una función booleana con un parámetro de tipo Elemento cuyo
   --  nombre por omisión es Acción_2 
   with function Acción_2 (X : Elemento) return Boolean is <>;