我知道可以将过程的定义从抽象类型推迟到其派生类型。是否可以在抽象类型中包含'延迟'数据,即其类型和值仅在派生类中定义的数据?
我在stackoverflow上找到的最接近的问题是here。它无法满足我的需求。
如果需要澄清,请询问。非常感谢。
答案 0 :(得分:1)
没有直接的方法来推迟(抽象)派生类型的数据组件的定义,因为有过程组件,所以没有声明,例如
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编译器实现了它。