Fortran 2003,数据可以以抽象类型推迟吗?

时间:2014-03-07 04:47:54

标签: oop fortran deferred abstract-data-type

我知道可以将过程的定义从抽象类型推迟到其派生类型。是否可以在抽象类型中包含'延迟'数据,即其类型和值仅在派生类中定义的数据

我在stackoverflow上找到的最接近的问题是here。它无法满足我的需求。

如果需要澄清,请询问。非常感谢。

1 个答案:

答案 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编译器实现了它。