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 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: Sun, 12 Oct 2014 17:47:16 +0200 Organization: cbb software GmbH Message-ID: <10ir7anot1ujj$.kcl1b5ynppz8.dlg@40tude.net> References: 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:22392 Date: 2014-10-12T17:47:16+02:00 List-Id: On Sun, 12 Oct 2014 11:38:16 -0300, hreba wrote: [...] > 1. Is this really the shortest form? (Why can't I contract the 2 lines > under "package MainAux is" into "package GuiTK is new Gui(GuiTK)"? Yes. Each generic instance must have a name and be explicitly instantiated. > 2. The generic package file has to depend on a specific actual package? If it has a formal package parameter then each its instance depends on a specific actual package. > If one day I decide to use, let's say Qt, then I will have to change the > respective lines in gui.ads into > package Toolkit is new GuiQt; ? That will not work. It should be an instance of GuiGk if you want to pass it as the parameter TK. > 3. My actual package GuiGtk has grown considerably, so I want to split > up that too into parent and child package, adding something like A child of a generic package must be generic. I.e. you should declare it this way: generic package GuiGtk.SimpleGad is 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. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de