在 Fortran 中重载不同的接口程序

Overloading with different interface procedures in Fortran

假设您有两个具有不同接口的子例程,并且您有两种类型,每种类型对应于其中一个过程。

type, abstract :: base
 contains 
 procedure :: pointer_to_routine
 end type base 

 type, extends(base) :: first_case
 contains 
 procedure :: pointer_to_routine => first_case_routine
 end type first_case 

 type, extends(base) :: second_case
 contains 
 procedure :: pointer_to_routine => first_sec_routine
 end type second_case 

所以这不是有效的 Fortran 代码,但这是我想要实现的想法。如果例程具有相似的接口,我可以在基本声明类型中定义 abstract interfacedeferred 属性。 但是由于我的两个例程有不同的接口,我不确定这是怎么回事。

本质上,一个例程比另一个例程需要更多的输入,因此一种解决方案是将剩余的输入添加为虚拟输入,尽管这可能会造成一些混乱,我想知道是否有更方便的方法解决方案。

您为此发明的所有解决方案都将是解决方法。该语言的设计方式很简单,所有具有与父类型中相同绑定名称的过程都应该具有相同的接口。请注意,其他语言也有类似的 problems/features Override method with different signature.

如果您知道在一般情况下需要虚拟参数但在特定情况下不需要,则可以使用虚拟参数。它们可以是可选参数。您还可以使包含在多态派生中的输入参数 type.That 虽然会带来新问题。