在 Fortran 中覆盖具有 'nopass' 属性的过程

Overriding a procedure with 'nopass' attribute in Fortran

假设我有

type :: type1

    contains

    procedure, nopass :: proc => proc_type1

end type type1

type, extends (type1) :: type2

    contains

    procedure, nopass :: proc => proc_type2

end type type2

如果我这样做 call instanceOfType2%proc() 会怎样?虽然这个编译我强烈怀疑 proc_type1 不会被 proc_type2 覆盖,因为它们具有相同的签名并且编译器无法确定我想调用它们中的哪一个。是吗?

那么我想我需要做的是在这种情况下避免 nopass 属性。或者还有其他方法吗?

有人可以确认或解释一下吗?谢谢。

Nopass 与 nonoveridable 不同。这也很简单,只需测试您的代码,看看会发生什么。

编译器可以很容易地确定调用其中的哪一个,他有你用来调用类型绑定过程的实例的动态类型。然后它在table of type bound procedures中搜索哪个是动态调度期间调用的权利。