我有一个包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
的实例?
答案 0 :(得分:4)
正如Ada Programming: Advanced generics中所讨论的,它可能有助于区分该通用单元的通用单元和实例。编译器告诉您不能在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);