【发布时间】:2014-06-02 13:59:11
【问题描述】:
我可以通过添加一个模块文件来扩展程序,在该文件中我扩展最初定义的派生类型,例如:
module mod1
type type1
real :: x
end type
end module
module mod2
use mod1
type,extends(type1) :: type2
contains
procedure,pass :: g
end type
contains
function g(y,e)
class(type2), intent(in) :: y
real,intent(in) :: e
g=y%x+e
end function
end module
program test
use mod2
type(type2) :: a
a%x=3e0
write(*,*) a%g(5e0)
end program
但是使用此解决方案,每次添加另一个模块时,我都需要更改调用程序中“a”(type1->type2)的声明。所以我的问题是,是否有办法解决这个问题,即我可以将类型绑定过程添加到另一个模块中的派生类型,而无需更改类型的原始名称。
我完全理解这可能行不通,因为我可以声明一个变量并稍后扩展它的类型,这对我来说听起来有问题。所以,我想到了延期声明。但这并不是我真正想要的,因为我首先必须将它添加到原始定义中,其次我需要提供一个接口,因此需要知道后面的函数(这里是 g)的变量。但是,也许有人对此有很好的解决方案。
所有这些当然是为了给程序带来更多的结构,尤其是当我想到不同的人同时在一个程序上工作时,这种拆分工作包的可能性似乎相当有用。
【问题讨论】:
标签: module fortran derived-types