Создание общих дочерних пакетов в Аде 95 - PullRequest
3 голосов
/ 15 января 2012

У меня есть пакет p1 и два дочерних пакета: p1.child1 и p1.child2 Все пакеты являются общими. Я пытаюсь создать экземпляр p1.child1 в p1.child2:

package body p1inst.child2 is

   package p1inst is new p1;
   use p1inst;

   package p1_child1inst is new p1inst.child1;
   use p1inst;

Я получил ошибку: Instansiation of "p1" within itself. Как я могу создать экземпляр универсального пакета p1.child2 в p1.child1?

1 Ответ

4 голосов
/ 15 января 2012

Как обсуждалось в Программирование на языке Ада: расширенные генерики , это может помочь различить универсальную единицу и экземпляр этой универсальной единицы.Компилятор говорит вам, что вы не можете создать экземпляр p1 в дочернем элементе p1, потому что «дочерние элементы универсального блока должны быть универсальными, несмотря ни на что».

Вместо этого создайте экземпляр p1 в другом месте и используйте этот экземпляр для создания экземпляра каждого из дочерних элементов p1.

Добавление: в качестве другого конкретного примера, procedure Jumble создает экземпляр Ada.Strings.Bounded:

Max_Word  : constant Positive := 24;
package ASB is new Ada.Strings.Bounded.Generic_Bounded_Length(Max_Word);

Позже процедура использует этот экземпляр для создания экземпляра универсального дочернего элемента, Ada.Strings.Bounded.Hash:

function Hash is new Ada.Strings.Bounded.Hash(ASB);
...