プロシージャ ポインタの定数配列を自動的に初期化する方法はありますか?
整数変数の値に応じて呼び出す必要がある一連のルーチンがあります。ステートメントを使用する代わりに、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