2012-08-01 69 views
1

在fortran 2003中,是否可以定义具有抽象类型组件的派生类型?例如,如下所示,我想定义类型为Sup的组件o_AbstAbst类型。我已经遇到带有抽象类型组件的Fortran派生类型

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

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

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

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

相关问题