2

在 fortran 2003 中,是否可以定义具有抽象类型组件的派生类型?例如,如下所示,我想定义一个Sup具有类型组件o_AbstAbst类型。

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_Abst通过内部赋值为组件赋值=(英特尔编译器说,“在内部赋值语句中,变量不应是多态的。”)。或者我不能为Abst类型对象编写构造函数,因为据我所知,如果传递的对象虚拟参数以外的参数是抽象类型,则无法正确覆盖延迟的类型绑定过程。

我也很高兴听到有关避免使用类似Sup. 如果很想用抽象类型的组件来定义一个类型,那么通常有哪些替代策略?

4

1 回答 1

6

派生类型可能具有具有抽象声明类型的多态组件。组件必须具有指针属性或可分配属性。

F2003 中不允许对多态对象进行内在分配(如果分配给的对象具有可分配属性,则在 F2008 中允许,但 ifort 12.1 不支持该属性)。在 F2003 中,可以使用带有 SOURCE 说明符的 ALLOCATE 语句来获得或多或少相同的结果。

您可以构造具有非抽象扩展Abst类型的对象(对象的动态类型是抽象的没有意义,因此Abst本身不存在结构构造函数)。对于绑定到采用一个或多个抽象类型参数的类型的过程没有限制。

于 2012-08-01T03:05:16.030 回答