Fortran过程中可能有隐式类型

时间:2013-05-05 15:32:11

标签: fortran deferred

采取诸如

之类的程序
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,并提供一个隐藏二合一的接口,但我正在寻找一个不需要创建的解决方案另一个功能......可能只是修改现有的功能吗?

1 个答案:

答案 0 :(得分:6)

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

你可以,如果你喜欢更多kludgy的东西,可以编写一个低精度类型的例程,它包含对高精度类型的匹配例程的调用,并包含一些调整。我个人更喜欢这种接口路径。

最后,您可能会发现编译器允许您将错误类型的参数传递给例程,在后台执行一些自动类型调整。这是非标准的,可能是不便携的。