2016-12-02 96 views
0

我想要做的是创建一个类型,其中包含控制代码其他部分传递给它的值。这是菜单系统的一部分,并且会扩展抽象类型,并且本身是抽象的。我想要做的是存储访问权限。够简单。抽象类型的Ada OOP“generic”类型

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软件包并制作通用版(但我宁愿不要......)。

我也玩弄的想法存储地址,而不是访问,因为小梅并不关心它是什么样的地址:

type Adjuster is abstract new Menu_Item with record 
    --other fields 
    Value : System.Address 
end record; 

但首先我不知道有足够的了解地址以确定这是否会工作或如何它会工作(你分配给Value.all ..?),第二,能够存储[耸肩]真的感觉像Ada是设计成无法做到

我有点想法。任何帮助,将不胜感激。

+0

Ada不提供泛型类型。包是Ada的封装单元,而不是类型。尝试创建一个通用包。 –

+0

@JimRogers感谢您的评论。它不一定需要是泛型类型,甚至可以使用泛型。如果还有其他方式可以设置类型,以便它可以引用不同类型的数据,我不希望为此类型创建专用包。 – Devsman

+0

通用参数只能传递给通用单元。您可以尝试在一个包中创建一个标记类型作为继承树的根,并提供用于扩展该类型及其关联方法的通用包。基本软件包应包含一个或多个调度程序或功能。 –

回答

3

通过设置想要扩展的类型tagged,可以获得想要的结果。

+0

好的。我没有注意到基类型未声明为已标记。 – darkestkhan