在Fortran 90中,我们可以通过接口重载功能。但是,根据this site,我们无法使用相同的参数名称定义这些函数。使用gfortran,它似乎不是一个问题,因为以下代码运行良好:
interface check
module procedure check_int, check_real
end interface
contains
subroutine check_int(cur, dname, func_name, fname)
integer, allocatable, intent(in) :: cur(:)
character(*) :: dname, func_name, fname
...
end subroutine
subroutine check_real(cur, dname, func_name, fname)
real, allocatable, intent(in) :: cur(:)
character(*) :: dname, func_name, fname
...
end subroutine
那么,这样做是不好的做法吗?
修改:使用关键字调用该功能不会改变任何内容。
答案 0 :(得分:16)
你的例子完全有效。它们可以通过参数的TYPE来区分。这些名字并不重要。在您的情况下,cur
参数的类型不同。
具有相同名称的参数可以通过其类型,种类或等级(TKR兼容性)来区分。
引用文章的要点是,您不能仅通过参数的ORDER区分两个特定过程。这是因为可以使用任何顺序的关键字参数调用过程。这可以通过为参数使用不同的名称来克服。
否则为具有相同参数名称但具有不同类型/种类/等级的通用程序声明更具体的程序是非常常见且完全有效的。
Fortran 2003/2008为通用分辨率增加了一些可能性。也可以通过参数的指针/可分配属性和过程指针伪参数来区分过程。