用Fortran重载函数
在Fortran 90中,我们可以使用接口重载函数。但是,根据,我们不能用相同的参数名称定义这些函数。对于gfortran,这似乎不是一个问题,因为以下代码工作得足够好:用Fortran重载函数,fortran,overloading,fortran90,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
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
那么,这样做是不好的做法吗
编辑:使用关键字调用函数不会改变任何内容。您的示例完全有效。它们可以通过参数的类型来区分。那么名字就不重要了。在您的情况下,
cur
参数的类型不同
具有相同名称的参数可以通过其类型、种类或等级进行区分(TKR兼容性)
参考文章的要点是,您不能仅根据参数的顺序来区分两个特定的过程。这是因为可以使用关键字参数按任意顺序调用过程。这可以通过为参数使用不同的名称来克服
否则,为具有相同参数名称但具有不同类型/种类/等级的泛型过程声明更具体的过程是非常常见和完全有效的
Fortran 2003/2008为通用解析添加了更多的可能性。也可以通过参数的指针/可分配属性和过程指针伪参数来区分过程。我没有看到这样的情况。谢谢:)