From: "Jeffrey R. Carter" <spam.not.jrcarter@acm.not.spam.org>
Subject: Re: Question about generics.
Date: Mon, 03 Jul 2006 06:30:27 GMT
Date: 2006-07-03T06:30:27+00:00 [thread overview]
Message-ID: <7Q2qg.812592$084.507058@attbi_s22> (raw)
In-Reply-To: <Xns97F47B960CF95pchapinsovernet@198.186.192.137>
Peter C. Chapin wrote:
>
> generic
> Size : in Integer;
> package Xyzzy is
> type Index is mod Size;
> -- etc.
> end Xyzzy;
What does a Size of -7 mean?
As you've discovered, generic formal parameters are not static in Ada,
and so cannot be used in a type declaration.
You can do
generic
type Index is mod <>;
package P is
Size : constant Positive := Index'Modulus;
end P;
> I realize that I could make the Index type a generic parameter but that
> would require me to define the type at the point of instantiation and
> that seems unnatural. Conceptually I'm trying to parameterize the
> package on a (static) size. It doesn't seem like I should have to define
> a type to express that concept.
Except there's no way to do that.
> template< int size >
> class Xyzzy {
> char array[size]; // size is a compile time constant.
> };
This is a different kettle of fish. You can't declare new integer types
in C++, so you can't compare what you're trying to do with C++. Array
subtype constraints don't have to be static, or even constant:
generic
Size : Positive; -- or Natural, if zero is acceptable
package P is
subtype S is String (1 .. Size); -- Size is a non-static constant
end P;
declare
N : Positive := Get;
begin
if N rem 2 /= 0 then
N := N + 1;
end if;
declare
subtype S is String (1 .. N);
begin
null;
end;
end;
Note that Integer is perfectly OK for using type String, for exponents,
and for sizes and counts that will fit in a 16-bit signed integer, but
for just about everything else you should be using user-defined types
based on the requirements of the application. Whichever you use, if
negative values are not meaningful, you should explicitly exclude them
by using an appropriate subtype.
--
Jeff Carter
"We'll make Rock Ridge think it's a chicken
that got caught in a tractor's nuts!"
Blazing Saddles
87
next prev parent reply other threads:[~2006-07-03 6:30 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-07-02 16:08 Question about generics Peter C. Chapin
2006-07-02 18:49 ` Martin Krischik
2006-07-03 6:30 ` Jeffrey R. Carter [this message]
2006-07-03 10:33 ` Peter C. Chapin
2006-07-03 11:42 ` Jean-Pierre Rosen
2006-07-03 16:44 ` Pascal Obry
2006-07-04 1:09 ` Peter C. Chapin
2006-07-04 6:17 ` M E Leypold
2006-07-04 10:48 ` Peter C. Chapin
2006-07-03 20:03 ` Jeffrey R. Carter
2006-07-03 20:18 ` Dmitry A. Kazakov
2006-07-04 0:08 ` Randy Brukardt
2006-07-04 7:48 ` Dmitry A. Kazakov
2006-07-04 0:43 ` Jeffrey R. Carter
2006-07-03 9:46 ` Martin Krischik
2006-07-04 13:29 ` Stephen Leake
2006-07-05 12:08 ` Dmitry A. Kazakov
-- strict thread matches above, loose matches on Subject: below --
1993-09-02 17:45 question " Stef Van Vlierberghe
1993-08-12 15:18 Robert I. Eachus
1993-08-11 18:48 cis.ohio-state.edu!magnus.acs.ohio-state.edu!math.ohio-state.edu!howland.
1993-08-11 0:25 agate!howland.reston.ans.net!europa.eng.gtefsd.com!darwin.sura.net!seas.g
1993-08-10 15:53 Robert I. Eachus
1993-08-09 21:29 Kenneth Anderson
1989-05-29 20:54 Question " "14827_DAVID PAPAY"
1989-05-29 7:02 "Jonathan B. Owen"
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox