親愛なる Fortran プログラマーへ
Fortran 2003 以降で定数 (パラメータ) プロシージャ ポインタ配列を宣言できるかどうか、誰にもわかりませんか?
以下に示すように、入力整数引数に応じて異なる関数を呼び出すスイッチャー関数があります。プロシージャ ポインタの配列 (派生でラップされた) 型を使用します。この配列は、使用する前に実行時init()
にルーチンを介して初期化する必要があります。コンパイル中にすでにこの配列を初期化し、そのような初期化ルーチンの必要性を回避する方法はありますか? 実行中に値が変化しないため、として定義することもできます。parameter
module testmod
implicit none
interface
function funcInterface() result(res)
integer :: res
end function funcInterface
end interface
type :: ptrWrap
procedure(funcInterface), nopass, pointer :: ptr
end type ptrWrap
type(ptrWrap) :: switcher(2)
contains
subroutine init()
switcher(1)%ptr => func1
switcher(2)%ptr => func2
end subroutine init
function callFunc(ii) result(res)
integer, intent(in) :: ii
integer :: res
res = switcher(ii)%ptr()
end function callFunc
function func1() result(res)
integer :: res
res = 1
end function func1
function func2() result(res)
integer :: res
res = 2
end function func2
end module testmod
program test
use testmod
implicit none
call init() ! I'd like to get rid of this call.
print *, callFunc(1)
print *, callFunc(2)
end program test