From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC,WEIRD_PORT autolearn=no autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!mx02.eternal-september.org!news.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Generic Library Units? Date: Mon, 13 Oct 2014 09:45:01 +0200 Organization: cbb software GmbH Message-ID: References: <10ir7anot1ujj$.kcl1b5ynppz8.dlg@40tude.net> Reply-To: mailbox@dmitry-kazakov.de NNTP-Posting-Host: ZB2Fb2q1fa4xpMpNKFqV6Q.user.speranza.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: 40tude_Dialog/2.0.15.1 X-Notice: Filtered by postfilter v. 0.8.2 Xref: news.eternal-september.org comp.lang.ada:22415 Date: 2014-10-13T09:45:01+02:00 List-Id: On Sun, 12 Oct 2014 19:39:49 -0300, hreba wrote: > On 10/12/2014 12:47 PM, Dmitry A. Kazakov wrote: >> On Sun, 12 Oct 2014 11:38:16 -0300, hreba wrote: >> >> A child of a generic package must be generic. I.e. you should declare it >> this way: >> >> generic >> package GuiGtk.SimpleGad is > > Did that. And I added to Gui.ads the line > > with package TKSG is new GuiGtk.SimpleGad; > > Now the line in mainaux.ads: > > package GuiTK is new Gui(Toolkit); > > which was correct before, is accused: > > mainaux.ads:10:04: missing actual "TKSG" > mainaux.ads:10:04: in instantiation of "Gui" declared at gui.ads:13 > > Adding > package ToolkitSG is new GuiGtk.SimpleGad; > before that line gets me > mainaux.ads:9:29: invalid prefix in selected component "GuiGtk" > > Replacing it with > package ToolkitSG is new Toolkit.SimpleGad; > turns the error message into > mainaux.ads:9:36: generic child unit "SimpleGad" is not visible > > So how do I instantiate that? with Gui; with GuiGtk.SimpleGad; with Gui.SimpleGad; package MainAux is package Toolkit is new GuiGtk; package SimpleGad is new Toolkit.SimpleGad; package GuiTK is new Gui (Toolkit, SimpleGad); end MainAux; >> And you will have to instantiate it somewhere. >> >> Generic packages are not suitable for abstraction GUI engines as complex as >> GTK or Qt. If you really want to use both GTK and Qt as the back-end, you >> should carefully design a set of abstract tagged types in several packages. >> GTK and Qt versions will derive from theses types. >> > I don't want to mix different toolkits. I want to have the same API in > the case I switch to another one later. It does not matter. You have to design these "same API" in one way or another. Doing this in the form of generic packages, when API's basic operations are formal generic subprograms and the rest is implemented in these terms is extremely tedious for anything more complex than trivial teaching examples. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de