【问题标题】:Fortran 2003, can data be deferred in an abstract type?Fortran 2003,可以在抽象类型中延迟数据吗?
【发布时间】:2014-03-07 04:47:54
【问题描述】:

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

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

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

【问题讨论】:

  • 我不认为这是对 [deferred] 标签的错误使用。不太确定删除它。

标签: oop fortran deferred abstract-data-type


【解决方案1】:

没有像过程组件那样推迟定义(抽象)派生类型的数据组件的直接方法,因此没有诸如

之类的声明
type(magic), deferred :: element

可以被扩展类型中的具体声明覆盖。我认为简单的(?)解决方法是在声明中使用class。为了获得最大的灵活性,您可以使用无限的多态组件,eg

type :: stype
    class(*), allocatable :: element
end type style

然后你不能做的是用一个(重新)声明的具体扩展类型指定类型

type, extends(stype) :: mstype
    integer :: element
end type mstype

相反,如果您想定义一个具有integer 元素的扩展类型,您将创建该类型并为其编写一个构造函数,以确保其element 分配有integer 类型。

如果您的要求比较适中,参数化派生类型的 2003 年特性可能会让您满意,但据我所知,目前只有 Cray 和 IBM XL 编译器实现了这一点。

【讨论】:

  • class(*) 组件必须是可分配的或指针。而且我不相信这种重新声明在扩展类型中是可能的。
  • 你是对的@VladimirF,关于元素的可分配性,这将让我学会在没有编译器的情况下编写代码!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-12
相关资源
最近更新 更多