【发布时间】:2019-03-02 02:34:09
【问题描述】:
我想知道是否有可能在 Fortran 中定义一个派生类型,它会自动返回正确的类型,而无需专门调用该类型,例如var%real?这是一个解释我的意思的例子:
module DervType
implicit none
type, public :: mytype
real(8) :: r
integer :: i
logical :: l
end type
end module DervType
program TestType
use DervType
implicit none
type(mytype) :: test
test = 1. !! <-- I don't want to use test%r here
end program TestType
这是否可以通过定义某种接口分配(重载 =)或类似的东西来实现?这甚至可能吗?
谢谢!任何帮助表示赞赏!
【问题讨论】:
-
是的,可以定义分配。你可以试试看它是否符合你的要求吗?我想这与您的previous question 有关,但您可以在没有多态性的情况下执行此操作。
-
参见:this question。
-
但这是您问题的一个非常具体的方面。也就是说,
test = x可以这样做,以便test集合的组件在某种程度上由x的类型确定。然而,这就是你的意思吗? “自动返回正确类型”的部分表明您可能需要做一些更奇特的事情(比如call sub(test)的行为就像call sub(test%r)如果参数是真实的,等等)。 -
感谢您的回答!是的,我想这都是相关的,即使我放弃了其他东西......如果我编译上面的内容,我会得到:
Error: Can't convert REAL(4) to TYPE(mytype),所以这不起作用。抱歉,我已经查看了您链接中的示例,但我不明白。我确实需要一个界面对吗? -
所以我必须定义几个函数(实数、整数、逻辑)并通过接口分配它们?要试试看!谢谢!
标签: interface fortran derived-types