使用Fortran重载函数

时间:2012-12-05 11:11:45

标签: fortran overloading fortran90

在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

那么,这样做是不好的做法吗?

修改:使用关键字调用该功能不会改变任何内容。

1 个答案:

答案 0 :(得分:16)

你的例子完全有效。它们可以通过参数的TYPE来区分。这些名字并不重要。在您的情况下,cur参数的类型不同。

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

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

否则为具有相同参数名称但具有不同类型/种类/等级的通用程序声明更具体的程序是非常常见且完全有效的。

Fortran 2003/2008为通用分辨率增加了一些可能性。也可以通过参数的指针/可分配属性和过程指针伪参数来区分过程。