Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Fortran程序中可以有隐式种类_Fortran_Deferred - Fatal编程技术网

在Fortran程序中可以有隐式种类

在Fortran程序中可以有隐式种类,fortran,deferred,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=

采取一种程序,如

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

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

不,没有办法编写一个函数来接受不同类型的实数(或任何其他内部变量)的参数。正如您已经知道的,编写代码的标准方法是为您所关心的每种类型编写实现,并将它们封装在一个接口中

如果您喜欢更麻烦的东西,您可以为低精度种类编写一个例程,该例程封装对高精度种类的匹配例程的调用,并包含某种类型的调整。就我个人而言,我更喜欢接口路由


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

您的类型混淆了。为什么要将其标记为“延迟”?我是不是遗漏了什么?因为这是我的问题,所以情况好坏参半。我忘记了“?”符号,所以我编辑添加了它们并更正了这句话:有没有办法在同一个程序中用不同的种类调用相同的函数??。例如:“延迟”指的是进程可以隐式地知道数组大小的机制:
子例程pp(a);真实的(a)::a(:);打印*,尺寸(a);结束
。我从Fortran 2003标准中摘录了这个词。