通常,抽象类型是后代派生类型的模型。包含在该类型中的过程如果被推迟,则应该是 PUBLIC,因为 PRIVATE 不能被模块本身引用或覆盖。但是,如果我希望每个后代都具有相同的功能 PRIVATE 过程来做某事(例如,测试其实例的初始化状态),我该如何设计 ABSTRACT 派生类型?我是否必须在每个后代中手动定义它们,还是可以在 ABSTRACT 中放置一个模型并在后代中实现它?下面是一个例子:
module test1
implicit none
private
public :: my_numeric_type
type, abstract :: my_numeric_type
contains
private
procedure(op2), deferred :: add
procedure(op2), deferred :: subtract
generic, public :: operator(+) => add
generic, public :: operator(-) => subtract
end type my_numeric_type
abstract interface
function op2(a, b) result(r)
import :: my_numeric_type
class(my_numeric_type), intent(in) :: a, b
class(my_numeric_type), allocatable :: r
end function op2
end interface
end module test1
module test2
use test1, only: my_numeric_type
implicit …Run Code Online (Sandbox Code Playgroud)