Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 带有抽象类型组件的Fortran派生类型_Oop_Design Patterns_Fortran_Abstract Class_Type Extension - Fatal编程技术网

Oop 带有抽象类型组件的Fortran派生类型

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

在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
   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
本身不存在结构构造函数)。对于绑定到使用一个或多个抽象类型参数的类型的过程没有限制