是否有可能超载Present(arg),所以我可以 将(arg1,arg2,...)表示为
If (Present (arg1) .And. Present (arg2) .And. ... )
我正在尝试这样做,但感觉好像不是那么简单。
答案 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的风格。]此外,您仍然需要处理区分特定实现的要求。这听起来有点太多了,真的。