首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >元素数组中的多态性

元素数组中的多态性
EN

Stack Overflow用户
提问于 2015-06-29 09:26:21
回答 1查看 777关注 0票数 1

假设我定义了一个名为geometry的派生类型(在Fortran2003中),并将其扩展为两个新的派生类型:circletriangle。每种扩展类型都有自己的构造函数NewCircleNewTriangle,分别返回circle对象和triangle对象。

那么我想这样做:

代码语言:javascript
复制
use appropriate_module
class(geometry), allocatable :: Geo(:)
allocate(Geo(2))
Geo(1) = NewCircle
Geo(2) = NewTriangle

当然,最后两行在Fortran 2003标准中是无效的。我不想创建一个封装在派生类型中的指针数组来链接不同类型的对象,因为在数组中链接对象之前需要创建这些对象。在上面(假设的)情况下,对象将被立即创建并存储在数组中。

有什么建议可以这样做吗,或者这是语言的限制?

EN

回答 1

Stack Overflow用户

发布于 2015-06-29 18:51:34

如果需要值语义,可以使用多态可分配组件创建一个派生类型数组。

代码语言:javascript
复制
use appropriate_module
type geometry_element
  class(geometry), allocatable :: item
end type geometry_element

type(geometry_element), allocatable :: geo(:)
geo = [ geometry_element(NewCircle()),  &
        geometry_element(NewTriangle()) ]

如果使用可分配参数(而不是通过函数结果)将新的geometry对象传递回调用作用域,则MOVE_ALLOC内在函数提供了一种将构造的值移动到数组元素中的有效方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31106539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档