【问题标题】:Overloading with different interface procedures in Fortran在 Fortran 中使用不同的接口过程重载
【发布时间】:2019-01-17 13:21:14
【问题描述】:

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

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 属性。 但由于我的两个例程有不同的接口,我不确定这会如何解决。

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

【问题讨论】:

    标签: oop fortran overloading intel-fortran


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复,这是什么意思:您也可以将输入参数包含在多态派生类型中。但这会带来新的问题
    • 您将拥有一个类型包含 a、b 和 c 的参数,而不是参数 a、b 和 c。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多