重载多个参数的Present

时间:2015-06-15 22:14:21

标签: fortran overloading

是否有可能超载Present(arg),所以我可以 将(arg1,arg2,...)表示为

If (Present (arg1) .And. Present (arg2) .And. ... )

我正在尝试这样做,但感觉好像不是那么简单。

1 个答案:

答案 0 :(得分:2)

有趣的答案是:不,你不能。您确实可以创建名为present的通用标识符,并使用新的特定名称:

module mod
  interface present
    module procedure present_two_real
  end interface
contains
  logical function present_real_real(a,b)
    ..
  end function
end module

但是,在该函数内部,我们知道伪参数必须是optional。如果不是,那么将过程中的可选实际参数传递给该函数是不合法的:参见Fortran 2008 12.5.2.12。

当我们看到不同的两个程序必须能够具有相同的通用标识符(12.4.3.4.5)时,我们有约束C1215。这是新特定名称中optional要求的约束,这使得我们无法做您想做的事情。请注意,特定过程present中的参数不是可选的。

这并不意味着你当然不能拥有通用present_all。但是,您需要针对所需的每个参数特征组合的特定过程(正如我在上面选择的特定名称所示)。 [回想一下,模板不是Fortran的风格。]此外,您仍然需要处理区分特定实现的要求。这听起来有点太多了,真的。