Уважаемые программисты 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