在 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 interface
和 deferred
属性。
但是由于我的两个例程有不同的接口,我不确定这是怎么回事。
本质上,一个例程比另一个例程需要更多的输入,因此一种解决方案是将剩余的输入添加为虚拟输入,尽管这可能会造成一些混乱,我想知道是否有更方便的方法解决方案。
您为此发明的所有解决方案都将是解决方法。该语言的设计方式很简单,所有具有与父类型中相同绑定名称的过程都应该具有相同的接口。请注意,其他语言也有类似的 problems/features Override method with different signature.
如果您知道在一般情况下需要虚拟参数但在特定情况下不需要,则可以使用虚拟参数。它们可以是可选参数。您还可以使包含在多态派生中的输入参数 type.That 虽然会带来新问题。
假设您有两个具有不同接口的子例程,并且您有两种类型,每种类型对应于其中一个过程。
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
属性。
但是由于我的两个例程有不同的接口,我不确定这是怎么回事。
本质上,一个例程比另一个例程需要更多的输入,因此一种解决方案是将剩余的输入添加为虚拟输入,尽管这可能会造成一些混乱,我想知道是否有更方便的方法解决方案。
您为此发明的所有解决方案都将是解决方法。该语言的设计方式很简单,所有具有与父类型中相同绑定名称的过程都应该具有相同的接口。请注意,其他语言也有类似的 problems/features Override method with different signature.
如果您知道在一般情况下需要虚拟参数但在特定情况下不需要,则可以使用虚拟参数。它们可以是可选参数。您还可以使包含在多态派生中的输入参数 type.That 虽然会带来新问题。