From: Victor Porton <porton@narod.ru>
Subject: Re: Limited object by reference or access argument?
Date: Mon, 07 Aug 2017 02:21:47 +0300
Date: 2017-08-07T02:21:47+03:00 [thread overview]
Message-ID: <om88a9$1kis$1@gioia.aioe.org> (raw)
In-Reply-To: om83ke$1ejo$1@gioia.aioe.org
Victor Porton wrote:
> Victor Porton wrote:
>
>> Suppose we have
>>
>> type World_Type is tagged limited private;
>>
>> type BNode_ID_Handler is abstract tagged limited private;
>>
>> We need to set a bnode handler for a world object. Should the procedure
>> signature be
>>
>> procedure Set_Handler (World: World_Type;
>> Handler: access BNode_ID_Handler'Class);
>>
>> or
>>
>> procedure Set_Handler (World: World_Type;
>> Handler: BNode_ID_Handler'Class);
>>
>> The later can work with limited BNode_ID_Handler type, because tagged and
>> limited types are always passed by reference.
>>
>> I prefer the second one, because with the first procedure signature it is
>> possible to pass an access to an already finalized object what is an
>> error, but want to ask you opinion which of the two procedure signatures
>> is better.
>
> It may work like this (in fact it is more complex):
>
> type World_Type is tagged limited
> record
> Handler: access BNode_ID_Handler'Class;
> end;
>
> procedure Set_Handler (World: World_Type;
> Handler: BNode_ID_Handler'Class) is
> begin
> World.Handler := Handler'Unchecked_Access;
> end;
I think it should be access parameter, because (as of Ada2005 and above)
this allows passing null, what may be useful in some situations.
--
Victor Porton - http://portonvictor.org
next prev parent reply other threads:[~2017-08-06 23:21 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-06 21:16 Limited object by reference or access argument? Victor Porton
2017-08-06 22:01 ` Victor Porton
2017-08-06 23:21 ` Victor Porton [this message]
2017-08-07 0:35 ` Victor Porton
2017-08-07 23:31 ` Randy Brukardt
2017-08-07 14:10 ` Jere
2017-08-07 23:28 ` Randy Brukardt
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox