在 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中搜索哪个是动态调度期间调用的权利。
假设我有
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中搜索哪个是动态调度期间调用的权利。