comp.lang.ada
 help / color / mirror / Atom feed
From: Jeffrey Carter <spam@spam.com>
Subject: Re: generics in Ada 83
Date: Tue, 13 Sep 2005 09:56:51 -0700
Date: 2005-09-13T09:56:51-07:00	[thread overview]
Message-ID: <pxDVe.3$Fv6.0@dfw-service2.ext.ray.com> (raw)
In-Reply-To: <1126617980.932226.320710@g43g2000cwa.googlegroups.com>

REH wrote:
> 
> generic
>     type X is private;
>     with procedure Y(Z : in X);
> package Foo;
> 
> I want to define a default for Y, but how can I without knowing X?

Defaults are defined for subprograms by inserting "is Name" or "is <>" 
before the semicolon (;):

    with procedure Y (Z : in X) is A;

or

    with procedure Y (Z : in X) is <>;

You can't use the former, since it requires a procedure A, visible at 
the point of the generic, that matches Y. Since you don't know what X is 
at the point of the generic, you can't have such a procedure.

You can use the latter, which requires a procedure Y, visible at the 
point of the instantiation. However, that's unlikely to be what you want.

You can also use a 2-step instantiation:

generic -- Outer
    type X is private;
package Outer is
    procedure Null_Proc (Z : in X);

    generic -- Inner
       with procedure Y (Z : in X) is Null_Proc;
    package Inner is
       ...
    end Inner;
end Outer;

Such an approach complicates the process of instantiating the generic, 
but may be OK if it results in an overall reduction in the complexity of 
the instantiation process. If your generic has many formal subprograms, 
but only a small percentage are likely to need explicit actuals, this 
might be acceptable.

However, if it's unlikely that a client will use all the services of the 
package, and different clients will use different subsets of those 
services, then you probably have a design problem. In such a case, you 
probably want to redesign to have several packages that factor out the 
likely subsets: several generics that provide the non-overlapping 
subsets of the possible services, and perhaps some higher-level generics 
that instantiate 2 or more of the non-overlapping subsets to provide 
overlapping subsets.

-- 
Jeffrey Carter
"Now go away or I shall taunt you a second time."
Monty Python and the Holy Grail
E-mail: jeffrey_r_carter-nr [commercial-at]
         raytheon [period | full stop] com



  parent reply	other threads:[~2005-09-13 16:56 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-09-13 13:26 generics in Ada 83 REH
2005-09-13 13:30 ` Georg Bauhaus
2005-09-13 16:25   ` REH
2005-09-13 19:23     ` Georg Bauhaus
2005-09-13 13:50 ` Martin Dowie
2005-09-13 16:30   ` REH
2005-09-13 16:41     ` Martin Dowie
2005-09-13 18:43       ` REH
2005-09-13 19:37         ` Ludovic Brenta
2005-09-13 19:53           ` REH
2005-09-13 16:56 ` Jeffrey Carter [this message]
2005-09-13 18:53   ` REH
2005-09-13 22:16     ` Jeffrey Carter
2005-09-13 22:44       ` REH
2005-09-14  8:14   ` Jean-Pierre Rosen
2005-09-14 12:40     ` REH
2005-09-14 13:15     ` Hyman Rosen
2005-09-14 14:08       ` Jean-Pierre Rosen
2005-09-14 15:23         ` Hyman Rosen
2005-09-14 15:41           ` Robert A Duff
2005-09-19 17:58             ` REH
2005-09-20  4:58               ` Hyman Rosen
2005-09-20 12:36                 ` REH
2005-09-20  1:34             ` adaworks
2005-09-20  4:14               ` Jim Rogers
2005-09-21 22:58               ` Robert A Duff
2005-09-22 15:18                 ` adaworks
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox