4

プロシージャ ポインタの定数配列を自動的に初期化する方法はありますか?

整数変数の値に応じて呼び出す必要がある一連のルーチンがあります。ステートメントを使用する代わりに、select case以下に示すようにプロシージャ ポインターを使用したいと思います。ただし、プロシージャ ポインタ配列の明示的な初期化をスキップして、ラップされたプロシージャ ポインタの定数配列として定義できればよいのですが。以下のコードは、私が見つけた解決策を示しています。コメント行は、達成したい目標を示しています。

module testmod
  implicit none

  abstract interface
    subroutine subInterface()
    end subroutine subInterface
  end interface

  type :: SubPtr
    procedure(subInterface), nopass, pointer :: ptr
  end type SubPtr

  ! Would be nice to use something like this:
  !type(SubPtr), parameter :: subs(2) = [ SubPtr(sub1), SubPtr(sub2) ]

contains

  subroutine sub1()
    print *, "SUB1"
  end subroutine sub1

  subroutine sub2()
    print *, "SUB2"
  end subroutine sub2

end module testmod


program test
  use testmod
  implicit none

  type(SubPtr) :: subs(2)
  integer :: ii

  ! Would be nice to get rid of those two initialization lines
  subs(1) = SubPtr(sub1)  
  subs(2) = SubPtr(sub2)

  ! Testing procedure pointer array
  do ii = 1, 2
    call subs(ii)%ptr()
  end do

end program test
4

1 に答える 1