gpt4 book ai didi

fortran - 过程指针数组的自动初始化

转载 作者:行者123 更新时间:2023-12-02 14:58:39 25 4
gpt4 key购买 nike

有没有办法自动初始化过程指针常量数组?

我有一堆例程,必须根据整数变量的值来调用它们。我想使用如下所示的过程指针,而不是使用 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

最佳答案

我认为这(您注释掉的“Would be Nice...”类型声明语句)只需要(工作)Fortran 2008 支持。为了在常量表达式中有效,结构构造函数中对应于指针组件的组件可以是初始化目标(7.1.12p1 3b)。对于过程指针组件,初始化目标是 initial-proc-target,它允许(除其他外)非基本模块过程,这就是 sub1sub2 都是。

关于fortran - 过程指针数组的自动初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32902850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com