我想要做的是创建一个类型,除其他外,控制代码的其他部分传递给它的值。这是菜单系统的一部分,它将扩展抽象类型,并且本身是抽象的。我想要做的是存储访问权限。很简单。
type Adjuster is abstract new Menu_Item with record
--other fields
Value : access Integer;
end record;
问题是,如何将其扩展到其他类型?我更喜欢必须定义Integer_Adjuster,Float_Adjuster等。我有点想使用泛型:
generic
type T;
type T_Access is access T;
type Adjuster is abstract new Menu_Item with record
--other fields
Value : T_Access;
end record;
但是这告诉我“类型调整器...”行中缺少分号,大概是因为Ada / Gnat无法弄清楚该行是否声明了应该包含在通用部分中的类型或者这个是通用部分应该应用的类型。我认为实现这一目标的唯一方法是实际制作一个Adjuster包并使其成为通用(但我宁愿不......)。
我还玩弄了存储地址而不是访问权限的想法,因为Ada并不关心它是什么类型的地址:
type Adjuster is abstract new Menu_Item with record
--other fields
Value : System.Address
end record;
但首先我不太了解地址以确定这是否有效或如何它会起作用(你分配给Value.all ..?)和第二,能够存储 [shrugs肩膀] 真的感觉就像Ada 设计的那样无法做到。
我有点想法。任何帮助将不胜感激。