| [Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode 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))
 
 每次都是重复的吗,能提炼出来,抽象成一个函数吗
 
 |