我知道可以將過程的定義從一個抽象類型推遲到它的派生類型。是否有可能在抽象類型中包含「延期」數據,即其類型和值僅在派生類中定義的數據?Fortran 2003,數據可以以抽象類型推遲?
我在stackoverflow上發現的最接近的問題是here。它不能滿足我的需求。
如果需要澄清,請詢問。非常感謝。
我知道可以將過程的定義從一個抽象類型推遲到它的派生類型。是否有可能在抽象類型中包含「延期」數據,即其類型和值僅在派生類中定義的數據?Fortran 2003,數據可以以抽象類型推遲?
我在stackoverflow上發現的最接近的問題是here。它不能滿足我的需求。
如果需要澄清,請詢問。非常感謝。
有沒有直接的方式來推遲,因爲這裏對程序成分的(抽象)派生類型的數據分量的定義,所以沒有聲明如
type(magic), deferred :: element
其可以通過具體聲明被覆蓋在擴展類型中。我認爲簡單的(?)解決方法是在聲明中使用class
。對於最終的靈活性,你可以使用無限多態成分,如
type :: stype
class(*), allocatable :: element
end type style
什麼你不能然後做在一個具體的擴展型與(重新)聲明類似
type, extends(stype) :: mstype
integer :: element
end type mstype
指定類型
相反,如果您要定義一個具有integer
元素的擴展類型,您可以創建該類型併爲其編寫一個構造函數,以確保其element
分配有類型integer
。
如果您的需求是較爲溫和的參數化派生類型的2003功能可能會令你滿意,但據我所知,只有Cray公司和IBM XL編譯器實現的是呢。
'類(*)'組件必須是可分配的或指針。我不認爲這種重新宣告是可能的擴展類型。 –
你是對的@VladimirF,關於元素的可分配性,這將學會我在沒有編譯器的情況下編寫代碼! –
我不認爲這是[deferred]標籤的不正確使用。不太確定要刪除它。 –