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
next prev 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