假设您有两个具有不同接口的子例程,并且有两种类型,每种类型对应于其中一个过程。
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 interface
和deferred
属性。
但是由于我的两个例程具有不同的接口,所以我不确定如何实现。
从本质上讲,一个例程比另一个例程需要更多的输入,因此一种解决方案是将其余输入作为虚拟输入添加,尽管这可能会引起一些混乱,而且我想知道是否有更方便的解决方案。
答案 0 :(得分:2)
您可以为此发明的所有解决方案都是解决方法。语言的设计方式很简单,所有与父类型具有相同绑定名称的过程都应具有相同的接口。请注意,其他语言也有类似的问题/功能Override method with different signature。
如果知道通常但在特定情况下不需要伪参数,则可以使用伪参数。它们可以是可选参数。您还可以使输入参数包含在多态派生类型中,但这会带来新的问题。