comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Using Generic Pasckages
Date: Thu, 9 Apr 2020 13:23:51 +0200
Date: 2020-04-09T13:23:51+02:00	[thread overview]
Message-ID: <r6n0k6$1s7f$1@gioia.aioe.org> (raw)
In-Reply-To: fca3b4d4-bfb8-596f-682d-ec13b185c520@planet.nl

On 2020-04-09 12:05, ldries46 wrote:
> Op 9-4-2020 om 10:57 schreef Dmitry A. Kazakov:
>> On 2020-04-09 10:40, ldries46 wrote:
>>> I have created some generic packages. tese are packages that only do 
>>> the same thing but with other types. Till now I did only need these 
>>> packages without interaction with between packages using the same 
>>> type. I just can declare them:
>>> Package AA is new BB(type); then calling them as
>>> A := AA.Get_Value;
>>> No other declaration seemed to be neccesary .
>>>
>>> Now I have the following situation:
>>> Package AA is new BB(integer);
>>> Package CC is new BB(integer);
>>> and a case where I have several statements using Package AA in one 
>>> condition and CC the other case.
>>> I want  to do that by using:
>>> if D then EE := AA; else EE := CC; end if;
>>> But I cannot find in the documentation  how the declaration of EE 
>>> should be made.
>>>
>>> Of course there is the possibility to create the same progrram 
>>> without using EE but that is far less readable and thus creating more 
>>> possible errors.
>>>
>>> If I have to do this without the generic packages I already have the 
>>> program alse will be less readable.
>>
>> What you are observing is the advantages of dynamic polymorphism 
>> (tagged types) over the static one (generics).
>>
>> Already the name static hints that you cannot select a polymorphic 
>> implementation (AA or CC) using some non-static (dynamic) expression D.
>>
> I am using Generic because in the program the same routines should be 
> possible for several different types, but now I have also a situation 
> where two instantiations of the same type should be used under some 
> conditions. For instance in a instantiation of a buffer of 
> Unbounded.String's depending on the condition one of two should be used, 
> but the buffer should also be used for another type

A solution, without going into what to change in Ada, is to make an 
interface and put data, e.g. Unbounded_String into an implementation of. 
BB will work on the interface's class.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de

  reply	other threads:[~2020-04-09 11:23 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-09  8:40 Using Generic Pasckages ldries46
2020-04-09  8:57 ` Dmitry A. Kazakov
2020-04-09 10:05   ` ldries46
2020-04-09 11:23     ` Dmitry A. Kazakov [this message]
2020-04-09 15:38 ` AdaMagica
2020-04-09 18:23 ` Simon Wright
2020-04-09 20:45 ` Jere
2020-04-10 16:34 ` Stephen Leake
2020-04-11 13:16   ` ldries46
2020-04-11 14:15     ` Jeffrey R. Carter
replies disabled

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