Oop 带有抽象类型组件的Fortran派生类型
在fortran 2003中,是否可以定义具有抽象类型组件的派生类型?例如,如下所示,我想定义一个类型Oop 带有抽象类型组件的Fortran派生类型,oop,design-patterns,fortran,abstract-class,type-extension,Oop,Design Patterns,Fortran,Abstract Class,Type Extension,在fortran 2003中,是否可以定义具有抽象类型组件的派生类型?例如,如下所示,我想定义一个类型Sup,其组件o_abs为abs类型 TYPE, ABSTRACT :: Abst CONTAINS PROCEDURE(some_proc), deferred, pass :: some_proc .. END TYPE Abst TYPE :: Sup PRIVATE CLASS(Abst) :: o_Abst .. CONTAINS PROC
Sup
,其组件o_abs
为abs
类型
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_abs
赋值(英特尔编译器说,“在内部赋值语句中,变量不应是多态的”)。或者,我不能为abs
类型对象编写构造函数,因为就我所知,如果传递的对象伪参数以外的参数是抽象类型,则无法正确重写延迟类型绑定过程
我也很高兴听到一个避免使用像
Sup
这样的类型的变通方法。如果很容易用抽象类型的组件定义类型,那么通常有哪些替代策略?派生类型可能具有抽象声明类型的多态组件。组件必须具有指针属性或可分配属性
在F2003中不允许对多态对象进行内部分配(如果分配给的对象具有可分配属性,则在F2008中允许,但ifort 12.1不支持该属性)。在F2003中,可以使用带有源说明符的ALLOCATE语句来实现大致相同的结果
您可以构造类型为
abs
的非抽象扩展的对象(对象的动态类型为抽象没有意义,因此abs
本身不存在结构构造函数)。对绑定到具有一个或多个抽象类型参数的类型的过程没有限制。派生类型可能具有抽象声明类型的多态组件。组件必须具有指针属性或可分配属性
在F2003中不允许对多态对象进行内部分配(如果分配给的对象具有可分配属性,则在F2008中允许,但ifort 12.1不支持该属性)。在F2003中,可以使用带有源说明符的ALLOCATE语句来实现大致相同的结果
您可以构造类型为abs
的非抽象扩展的对象(对象的动态类型为抽象没有意义,因此abs
本身不存在结构构造函数)。对于绑定到使用一个或多个抽象类型参数的类型的过程没有限制