ale*_*der 16 fortran overloading fortran90
在Fortran 90中,我们可以通过接口重载功能.但是,根据此站点,我们无法使用相同的参数名称定义这些函数.使用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
Run Code Online (Sandbox Code Playgroud)
那么,这样做是不好的做法吗?
编辑:使用关键字调用函数不会改变任何内容.
Vla*_*r F 17
你的例子完全有效.它们可以通过参数的TYPE来区分.这些名字并不重要.在您的情况下,cur参数的类型不同.
具有相同名称的参数可以通过其类型,种类或等级(TKR兼容性)来区分.
引用文章的要点是,您不能仅通过参数的ORDER区分两个特定过程.这是因为可以使用任何顺序的关键字参数调用过程.这可以通过为参数使用不同的名称来克服.
否则,为具有相同名称的参数但具有不同类型/种类/等级的通用程序声明更具体的过程是非常常见且完全有效的.
Fortran 2003/2008为通用分辨率增加了一些可能性.也可以通过参数的指针/可分配属性和过程指针伪参数来区分过程.