用Fortran重载函数

用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

在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
那么,这样做是不好的做法吗


编辑:使用关键字调用函数不会改变任何内容。

您的示例完全有效。它们可以通过参数的类型来区分。那么名字就不重要了。在您的情况下,
cur
参数的类型不同

具有相同名称的参数可以通过其类型、种类或等级进行区分(TKR兼容性)

参考文章的要点是,您不能仅根据参数的顺序来区分两个特定的过程。这是因为可以使用关键字参数按任意顺序调用过程。这可以通过为参数使用不同的名称来克服

否则,为具有相同参数名称但具有不同类型/种类/等级的泛型过程声明更具体的过程是非常常见和完全有效的


Fortran 2003/2008为通用解析添加了更多的可能性。也可以通过参数的指针/可分配属性和过程指针伪参数来区分过程。

我没有看到这样的情况。谢谢:)