[Fortran] 纯文本查看 复制代码 Module MInteger_Array
implicit none
!整数数组抽象
!策略模板(不同的type对应同一个subroutine)
type, abstract :: int_ary
integer :: iNs = 0
integer , allocatable :: iAry(:)
contains
procedure(strategy_procedure), deferred, pass :: SRead_int_ary
end type int_ary
abstract interface
subroutine strategy_procedure(this, iunit)
import :: int_ary
implicit none
class(int_ary) , intent(inout) :: this
integer , intent(in) :: iunit
end subroutine strategy_procedure
end interface
!2位整数
type, extends(int_ary) :: int_ary_2P
character(len=2) , allocatable :: CAry(:)
contains
procedure , pass :: SRead_int_ary => SRead_int_ary_2p
end type
!3位整数
type, extends(int_ary) :: int_ary_3P
character(len=3) , allocatable :: CAry(:)
contains
procedure , pass :: SRead_int_ary => SRead_int_ary_3p
end type
contains
Subroutine SRead_int_ary_2p(this, iunit)
implicit none
class(int_ary_2P), intent(inout) :: this
integer , intent(in) :: iunit
read(iunit,*) this%iNs
allocate(this%iAry(this%iNs))
read(iunit,*) this%iAry
allocate(this%CAry(this%iNs))
call SInt_to_2Char(this%iAry, this%CAry)
Return
End Subroutine
Subroutine SRead_int_ary_3p(this, iunit)
implicit none
class(int_ary_3P), intent(inout) :: this
integer , intent(in) :: iunit
read(iunit,*) this%iNs
allocate(this%iAry(this%iNs))
read(iunit,*) this%iAry
allocate(this%CAry(this%iNs))
call SInt_to_3Char(this%iAry, this%CAry)
Return
End Subroutine
End Module
这段代码中的
read(iunit,*) this%iNs
allocate(this%iAry(this%iNs))
read(iunit,*) this%iAry
allocate(this%CAry(this%iNs))
每次都是重复的吗,能提炼出来,抽象成一个函数吗
|