我在使用Fortran的OOP中是一个初学者,我正在尝试编写一个程序,该程序将多态变量作为参数处理.虽然我的原始代码要复杂得多(许多程序,几个派生类型等),但我可以找出一个简单的问题示例,例如:我有一个复制多态变量并略微修改此副本的过程.
我能够使用子程序成功编写我的测试程序:
MODULE my_module
type :: my_type
real :: data
endtype my_type
type, extends(my_type) :: my_derived_type
end type my_derived_type
CONTAINS
subroutine sub_copy(old,new)
implicit none
class(my_type), intent(in) :: old
class(my_type), allocatable, intent(out) :: new
allocate(new, source = old)
new%data = new%data + 1
end subroutine sub_copy
END MODULE my_module
PROGRAM my_prog
use my_module
implicit none
type(my_derived_type) :: x
class(my_type), allocatable :: y
x%data = 1.0
call sub_copy(x,y)
print*,y%data
deallocate(y)
END PROGRAM my_prog
Run Code Online (Sandbox Code Playgroud)
这在预期结果和内存分配/释放方面都表现良好.
但是,我一直在努力争取使用可以完成同样工作的Fortran 功能.
似乎以与子例程类似的方式定义的函数(见下文)不能简单地用作
y = …Run Code Online (Sandbox Code Playgroud)