2012-08-01 73 views
1

在fortran 2003中,是否可以定義具有抽象類型組件的派生類型?例如,如下所示,我想定義類型爲Sup的組件o_AbstAbst類型。我已經遇到帶有抽象類型組件的Fortran派生類型

TYPE, ABSTRACT :: Abst 
CONTAINS 
    PROCEDURE(some_proc), deferred, pass :: some_proc 
    .. 
END TYPE Abst 

TYPE :: Sup 
    PRIVATE 
    CLASS(Abst) :: o_Abst 
    .. 
CONTAINS 
    PROCEDURE :: another_proc 
END TYPE Sup 

的一個問題是在寫一個構造一個Sup類型的對象。我無法通過=的固有賦值爲組件o_Abst賦值(英特爾編譯器說:「在內部賦值語句中,變量不應該是多態的。」)。或者我不能寫一個Abst類型對象的構造函數,因爲如果除了傳入的對象啞元參數以外的參數是抽象類型,就不能正確覆蓋延遲的類型綁定過程。

我也很樂意聽到關於避免使用類型如Sup的解決方法。如果用抽象類型的組件定義一個類型是誘人的,那麼通常會有哪些替代策略?

回答

4

派生類型可能具有帶抽象聲明類型的多態組件。該組件必須具有指針屬性或可分配屬性。

在F2003中不允許對多態對象進行內部賦值(如果被賦值的對象具有allocatable屬性,但ifort 12.1不支持該屬性,則在F2008中允許)。在F2003中,可以使用帶SOURCE說明符的ALLOCATE語句來獲得或多或少的相同結果。

可以構建具有類型是Abst非抽象的擴展名(它是沒有意義的用於動態類型的對象的是抽象的,因此沒有結構構造存在Abst本身)的對象。綁定到抽象類型的一個或多個參數的類型的過程沒有限制。

相關問題