[Home] [Prev] [Next] [Index]
12.2 Generic Bodies
12.2 Generic Bodies
- 1
- The body of a generic unit (a generic body) [is a template for the instance bodies. The syntax of a generic body is identical to that of a nongeneric body].
- 1.a
- Ramification: We also use terms like "generic function body" and "nongeneric package body."
- Dynamic Semantics
- 2
- The elaboration of a generic body has no other effect than to establish that the generic unit can from then on be instantiated without failing the Elaboration_Check. If the generic body is a child of a generic package, then its elaboration establishes that each corresponding declaration nested in an instance of the parent (see 10.1.1) can from then on be instantiated without failing the Elaboration_Check.
- NOTES
- 3 4
- The syntax of generic subprograms implies that a generic subprogram body is always the completion of a declaration.
- Examples
- 4
- Example of a generic procedure body:
- 5
- procedure Exchange(U, V : in out Elem) is --see 12.1
T : Elem; --the generic formal type
begin
T := U;
U := V;
V := T;
end Exchange;
- 6
- Example of a generic function body:
- 7
- function Squaring(X : Item) return Item is --see 12.1
begin
return X*X; --the formal operator "*"
end Squaring;
- 8
- Example of a generic package body:
- 9
- package body On_Vectors is --see 12.1
- 10
- 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;
- 11
- for N in A'Range loop
Result(N) := Sum(A(N), B(N + Bias)); --the formal function Sum
end loop;
return Result;
end Sum;
- 12
- 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 Sigma;
end On_Vectors;
[Home] [Prev] [Next] [Index]
documentation@rational.com
Copyright © 1993-1998, Rational Software Corporation. All rights
reserved.