使用'重写过程;无通行证';Fortran语言中的属性

使用'重写过程;无通行证';Fortran语言中的属性,fortran,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 如果我调用instanceOfType2%proc(),会发生什么?虽然这是编译,但

如果我有

type :: type1

    contains

    procedure, nopass :: proc => proc_type1

end type type1

type, extends (type1) :: type2

    contains

    procedure, nopass :: proc => proc_type2

end type type2
如果我调用instanceOfType2%proc(),会发生什么?虽然这是编译,但我强烈怀疑
proc_type1
不会被
proc_type2
覆盖,因为它们具有相同的签名,并且编译器无法确定我要调用哪一个。是这样吗

那么我想我需要做的是避免在这种情况下使用
nopass
属性。或者还有别的办法吗


有人能证实或解释一下吗?谢谢。

无通行证与无通行证不同。测试你的代码,看看会发生什么也很容易


编译器可以很容易地确定调用它们中的哪一个,他拥有用于调用类型绑定过程的实例的动态类型。然后,它会在动态分派过程中搜索哪个过程有权调用。

Aha,但是为什么会有这样的限制,即除了传递的伪参数的类型之外,重写过程和重写过程必须具有相同的签名?即使签名不同,编译器也可以执行您所说的操作。这让我很困惑。这个调用必须对所有可能的动态类型都有意义。不要把它与静态分派-通用过程混淆,它们是完全不同的。我想我现在明白了。这是一个有助于澄清的评论。