Dear Fortran programmers,
does anybody know, whether it is possible to declare a constant (parameter) procedure pointer array in Fortran 2003 or above?
As given below, I have a switcher function, which calls different functions depending on an incoming integer argument. It uses an array of procedure pointers (wrapped in derived) types. This array has to be initialized via the init()
routine during run time before it can be used. Is there any way, to initialize this array already during compilation and avoid the necessity of such an initialization routine? It could be then also defined as parameter
, since it's value won't change during the run.
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
Fortran 2008 permits initialization of procedure pointers and procedure pointer components to procedure targets (versus
NULL()
). The syntax is consistent with other initializers.