是否可以用非多态过程重载延迟过程?
我想创建一个Parent
带有过程 ( foo
) 的抽象类 (),它必须由扩展的每个类重载Parent
。当我想再次扩展时遇到了问题,例如一个类 ( Grandchild
) 扩展了一个扩展的类 ( Child
) Parent
。
由于 Child 不是抽象的,它的 foo( foo_Child
) 必须是多态的。而是Grandchild
继承foo_Child
,而不是被迫定义foo_Grandchild
。此外,由于我不想foo_Child
成为多态,我希望能够Child
在foo_Child
.
module test_module
type, abstract :: Parent
contains
procedure(foo_Parent), deferred :: foo
end type
abstract interface
subroutine foo_Parent(this,input)
import Parent
class(Parent), intent(out) :: this
character(*), intent(in) :: input
end subroutine
end interface
type, extends(Parent) :: Child
contains
procedure :: foo => foo_Child
end type
type, extends(Child) :: Grandchild
! Is not required to define foo=>foo_Grandchild.
! This is not the behaviour I want.
end type
interface Child
module procedure new_Child
end interface
contains
function new_Child(input) result(this)
character(*), intent(in) :: input
type(Child) :: this
end function
subroutine foo_Child(this,input)
type(Child), intent(out) :: this ! Fails: 'this' is not polymorphic.
character(*), intent(in) :: input
this = Child(input) ! Fails if type(Child) is replaced by class(Child).
end subroutine
end module
program test
use test_module
end program
总结一下:
有什么方法可以使foo_Child
非多态但也超载foo_Parent
?或者有没有办法在多态过程中调用非多态函数(至少Child=Child
分配非多态rhs)?如果没有,是否有解决方法?
(我不想定义class(Child)=type(Child)
,但如果它是唯一的选择)。