comp.lang.ada
 help / color / mirror / Atom feed
From: "ophir.geffen@gmail.com" <ophir.geffen@gmail.com>
Subject: Re: using put procedure with a generic package
Date: Wed, 7 May 2008 21:48:47 -0700 (PDT)
Date: 2008-05-07T21:48:47-07:00	[thread overview]
Message-ID: <f4751dc5-2909-46c3-9dc3-5883f28d8400@56g2000hsm.googlegroups.com> (raw)
In-Reply-To: V1vUj.100363$TT4.42106@attbi_s22

On May 8, 7:09 am, "Jeffrey R. Carter"
<spam.jrcarter....@spam.acm.org> wrote:
> ophir.gef...@gmail.com wrote:
>
> > * queues.ads:
> > with Ada.Text_IO;
> > generic
> >   type Item is private;
> >   with procedure Item_Put(The_Item : in Item);
>
> Item_Put has exactly one parameter.
>
> >   package Int_IO is new Ada.Text_IO.Integer_IO(Integer);
> >   package Int_Queues is new Queues(Item => Integer, Item_Put =>
> > Int_IO.Put); --- error here
>
> > The package compiles on its own, but when I try to compile Test_Queues
> > there is an error:
> > no visible subprogram matches the specification for "Item_Put"
>
> Ada.Text_IO.Integer_IO has the following procedures named Put:
>
> procedure Put(File  : in File_Type;
>                Item  : in Num;
>                Width : in Field       := Default_Width;
>                Base  : in Number_Base := Default_Base);
>
> procedure Put(Item  : in Num;
>                Width : in Field       := Default_Width;
>                Base  : in Number_Base := Default_Base);
>
> procedure Put(To   :    out String;
>                Item : in     Num;
>                Base : in     Number_Base := Default_Base);
>
> None of these has exactly one parameter. That's why Int_IO.Put doesn't match
> Item_Put.
>
> You can call the 2nd of these with only one explicit parameter:
>
> Int_IO.Put (Item => 7);
>
> but it still has 3 parameters; the other 2 get the default values as the actual
> parameters.
>
> You need to create a procedure that matches Item_Put:
>
> procedure Put (Item : in Integer) is
>     -- null;
> begin -- Put
>     Int_IO.Put (Item => Item);
> end Put;
>
> and use it to instantiate your generic package.
>
> --
> Jeff Carter
> "I unclog my nose towards you."
> Monty Python & the Holy Grail
> 11

Hi
Thanks for the quick reply

The problem is that the package needs to know how to handle most non-
limited types like Integer, String, Client, Plane, Book, Document, ...
The Put procedure in any of those might and should be different from
Put Integer.

And I don't want to force the package user to declare a special Put
procedure with only one var.
Is there a better way to write the package and/or a more correct way
to declare it when using it?




  reply	other threads:[~2008-05-08  4:48 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-05-08  3:27 using put procedure with a generic package ophir.geffen
2008-05-08  4:09 ` Jeffrey R. Carter
2008-05-08  4:48   ` ophir.geffen [this message]
2008-05-08  7:24     ` Dmitry A. Kazakov
2008-05-08 15:54     ` Adam Beneschan
replies disabled

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