与Fortran的重载函数(Overloading functions with Fortran)

2019-08-03 13:24发布

在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

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

编辑:关键字调用函数不会改变任何东西。

Answer 1:

你举的例子是完全有效的。 他们可以通过的参数的类型来区分。 名称并不重要,那么。 在你的情况的类型cur的说法不同。

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

引用的文章的一点是,你不仅可以通过参数的顺序区分了具体的程序。 这是因为该程序可以在任何顺序的关键字参数来调用。 这可以通过使用不同的名称参数被克服了。

否则,宣布更多的具体程序的通用用一个参数的名称相同,但不同类型/种类/等级是很常见的,并完全有效。

Fortran的2003/2008增加了一些更多的可能性,以通用的解决方案。 另外,也可以通过它们的参数的指针/分配属性以及由过程指针伪参数来区分的程序。



文章来源: Overloading functions with Fortran