在Fortran中使用不同的接口过程进行重载

时间:2019-01-17 13:21:14

标签: oop fortran overloading intel-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属性。 但是由于我的两个例程具有不同的接口,所以我不确定如何实现。

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

1 个答案:

答案 0 :(得分:2)

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

如果知道通常但在特定情况下不需要伪参数,则可以使用伪参数。它们可以是可选参数。您还可以使输入参数包含在多态派生类型中,但这会带来新的问题。