comp.lang.ada
 help / color / mirror / Atom feed
From: anh_vo@udlp.com (Anh_Vo)
Subject: Re: Cloning a Class Wide Data Type with "new"?
Date: 6 Jun 2003 11:38:04 -0700
Date: 2003-06-06T18:38:05+00:00	[thread overview]
Message-ID: <5a59d6a9.0306061038.18a1072@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 havn't had much time to research this one yet, but I've
> got stuck trying to clone a class wide type this morning,
> on my way to work. A sample program is provided below.
> 
> 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 is a sample program that distills the problem:
> 
> 
> 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'(Orig);
> begin
> 
>     Put_Line("Cloned.V = " & Cloned.V'Img);
> 
> end TProg;
> 
> 
> TIA, Warren.

Base_Class is not a real type. Base_Type and Derived_Type are real
types. Thefore, either one of them should be used. I assume
Derived_Type was your intention in this case. Otherwise, explicit
conversion is needed. Both cases are shown below.

Cloned : Base_Access := new Derived_Type' (Orig);  -- case 1

Cloned : Base_Access := new Base_Type' (Base_Type (Orig));  -- case 2

A. Vo



  parent reply	other threads:[~2003-06-06 18:38 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
2003-06-06 18:38 ` Anh_Vo [this message]
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