The body of a generic subprogram or generic package is a template for the bodies of the corresponding subprograms or packages obtained by generic instantiations. The syntax of a generic body is identical to that of a nongeneric body.
For each declaration of a generic subprogram, there must be a corresponding body.
The elaboration of a generic body has no other effect than to establish that the body can from then on be used as the template for obtaining the corresponding instances.
Example of a generic procedure body:
procedure EXCHANGE(U, V : in out ELEM) is -- see example in 12.1 T : ELEM; -- the generic formal type begin T := U; U := V; V := T; end EXCHANGE;
Example of a generic function body:
function SQUARING(X : ITEM) return ITEM is -- see example in 12.1 begin return X*X; -- the formal operator "*" end;
Example of a generic package body:
package body ON_VECTORS is -- see example in 12.1 function SUM(A, B : VECTOR) return VECTOR is RESULT : VECTOR(A'RANGE); -- the formal type VECTOR BIAS : constant INTEGER := B'FIRST - A'FIRST; begin if A'LENGTH /= B'LENGTH then raise LENGTH_ERROR; end if; for N in A'RANGE loop RESULT(N) := SUM(A(N), B(N + BIAS)); -- the formal function SUM end loop; return RESULT; end; function SIGMA(A : VECTOR) return ITEM is TOTAL : ITEM := A(A'FIRST); -- the formal type ITEM begin for N in A'FIRST + 1 .. A'LAST loop TOTAL := SUM(TOTAL, A(N)); -- the formal function SUM end loop; return TOTAL; end; end;
References: body, elaboration, generic body, generic instantiation, generic package, generic subprogram, instance, package body, package, subprogram, subprogram body.
Rationale references: 12.3 The Use of Generic Units, 12.3.1 Examples of Generic Functions, 12.3.2 An Example of a Generic Package, 12.3.3 A Generic Package with Tasks, 12.3.4 A More Complicated Example
Style Guide references: 8.2.7 Exceptions
Address any questions or comments to adainfo@sw-eng.falls-church.va.us.