From: mcq95@earthlink.net (Marc A. Criley)
Subject: Re: Cloning a Class Wide Data Type with "new"?
Date: 6 Jun 2003 11:18:33 -0700
Date: 2003-06-06T18:18:34+00:00 [thread overview]
Message-ID: <254c16a.0306061018.38393868@posting.google.com> (raw)
In-Reply-To: 3EE097D5.2010901@cogeco.ca
"Warren W. Gay VE3WWG" <ve3wwg@cogeco.ca> wrote in message news:<3EE097D5.2010901@cogeco.ca>...
> I need to be able to allocate and then copy an arbitrary
> tagged type (based upon a base type) into the newly
> allocated object. There's gotta be a way to do this..
> I just can't remember it!
>
> The problem is the operation of the form of :
>
> Cloned : Base_Access := new Base_Class'(Orig);
Here's what I did to get it to compile...
Cloned : Base_Access := new Base_Class'Class'(Base_Class(Orig));
...AND it seemed to work--though it'd be a little iffy for me to
explain in detail what's going on.
Marc A. Criley
Modified sample program follows:
with Ada.Text_IO;
use Ada.Text_IO;
procedure TProg is
type Base_Type is tagged
record
V : Integer;
end record;
type Base_Access is access all Base_Type'Class;
subtype Base_Class is Base_Type'Class;
type Derived_Type is new Base_Type with
record
Z : Natural;
end record;
-- This is the original object to be cloned
Orig : Derived_Type := ( V => 32, Z => 99 );
-- This is a local copy (easy)
Copied : Base_Class := Orig;
-- Allocate Cloned to be same as Orig (the problem)
Cloned : Base_Access := new Base_Class'Class'(Base_Class(Orig));
begin
Put_Line("Cloned.V = " & Cloned.V'Img);
Put_Line("Cloned.Z = " & Derived_Type(Cloned.all).Z'Img);
end TProg;
next prev parent reply other threads:[~2003-06-06 18:18 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-06-06 13:32 Cloning a Class Wide Data Type with "new"? Warren W. Gay VE3WWG
2003-06-06 15:34 ` Jean-Pierre Rosen
2003-06-06 17:15 ` Warren W. Gay VE3WWG
2003-06-06 18:11 ` David C. Hoos
2003-06-06 18:18 ` Marc A. Criley [this message]
2003-06-06 18:38 ` Anh_Vo
2003-06-06 23:05 ` Anh_Vo
2003-06-09 16:48 ` Warren W. Gay VE3WWG
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox