我正在尝试编写一个子程序来反转数组的行。以下工作,但显式声明其输入arr的类型。因此,我需要一个单独的子程序来为类型为real的数组做同样的事情。当然有一种方法可以让它接受一个任意类型的数组 - 有人可以帮我解释语法吗?谢谢!
SUBROUTINE flipud(arr)
integer, dimension(:,:), intent(inout) :: arr
integer, dimension(:,:), allocatable :: tmp
integer i, j, nrow, ncol, ierr
nrow = size(arr, 1)
ncol = size(arr, 2)
allocate(tmp(nrow, ncol), STAT=ierr)
tmp(:,:) = arr(nrow:1:-1, :)
arr = tmp
deallocate(tmp)
END SUBROUTINE flipud
答案 0 :(得分:1)
Fortran没有相应的C ++模板。您可以使用模块过程创建一个接口,如下面所示。两个子例程共有的代码可以放在使用INCLUDE语句合并的文件中。
module foo
interface fliupud
module procedure flipud_i,flipud_r
end interface flipud
contains
subroutine flipud_i(arr)
integer, dimension(:,:), intent(inout) :: arr
! body
end subroutine flipud_i
!
subroutine flipud_r(arr)
real, dimension(:,:), intent(inout) :: arr
! body
end subroutine flipud_r
end module foo