采取诸如

function c(a,b)
  integer,parameter        :: dp=kind(2.0e0)
  real(kind=dp),intent(in) :: a,b
  real(kind=dp)            :: c
  c=a+b
end function

有没有一种方法可以在同一程序中以不同的类型调用同一函数?例如:
program help
  integer,parameter    :: sp=kind(2.0d0),dp=kind(2.0e0)
  print *, c(2.0_dp,3.0_dp)
  print *, c(2.0_sp,3.0_sp)
end program

我知道我可以使用c参数再次编写函数sp,并提供一个将两者隐藏在一起的接口(interface),但是我正在寻找不需要创建另一个函数的解决方案...可能只是修改现有的一?

最佳答案

不,没有办法编写一个接受不同实数(或任何其他内在函数)参数的函数。如您所知,无差别地编写代码的标准方法是为您所关心的每种类型编写实现并将它们包装在接口(interface)中。

如果您更喜欢杂乱无章的方法,则可以编写一个用于低精度种类的例程,该例程将对高精确度种类的匹配例程的调用包装起来,并进行某种调整。我个人更喜欢使用接口(interface)路由。

最后,您可能会发现编译器使您可以避免将错误种类的参数传递给例程,从而在幕后执行一些自动种类调整。这是非标准的,可能是不可移植的。

10-08 07:33