2016-12-02 179 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