在Fortran中,是否可以将整数链接到过程(子程序或函数)?
我正在写一个Fortran程序来解决Euler项目的问题。在我的实现中,每个问题都是一个函数,例如:在Fortran中,是否可以将整数链接到过程(子程序或函数)?,fortran,fortran2003,Fortran,Fortran2003,我正在写一个Fortran程序来解决Euler项目的问题。在我的实现中,每个问题都是一个函数,例如: character(len=20) function euler_problem_0001() use some_external_lib ... end function euler_problem_0001 如果我打印这个函数,我就会得到答案 print *, euler_problem_0001() 现在我已经完成了很多问题,我发现一遍又一遍地写print*,euler
character(len=20) function euler_problem_0001()
use some_external_lib
...
end function euler_problem_0001
如果我打印这个函数,我就会得到答案
print *, euler_problem_0001()
现在我已经完成了很多问题,我发现一遍又一遍地写print*,euler\u problem\u xxxx()
有点乏味。所以我的问题是:有没有一种方法可以构造一个派生类型,将一个整数(问题的数量)与实际过程联系起来?类似这样的方法
type, public :: int_to_proc
character(len=:) :: proc_name
procedure(proc_x), pointer :: proc_p
end type int_to_proc
如果我用一个整数初始化类型
call int_to_proc%init(2)
然后,类型绑定过程指针将指向函数euler\u problem\u 0002()
。在这种情况下,我只需要写一个类似的循环
type(int_to_proc) :: prob
do i = 1, 500
call prob%init(i)
print *, prob%proc_p()
end do
不是写500行的
print*,而是euler\u problem\u xxxx()
。此外,也欢迎进行任何变通。谢谢 您可以使用过程指针。想法:1。为不带参数且返回字符(len=20)
结果的过程定义一个接口。2.使用这样的过程定义用户定义的类型。3.定义say类型的数组。4.用结果填充数组。现在,您可以在该数组上循环并调用包含的过程。@Pierredebyl嗨,谢谢您的回复!我试图实现您的想法,但我发现在步骤4中,我仍然必须使指针数组的每个元素指向相应的过程,例如ptr\u-arr(1)%proc\u-ptr=>prob0001
,ptr\u-arr(2)%proc\u-ptr=>prob0002
,等等。现在我必须编写500行指针赋值,而不是500行print*,
,和一个循环。嗯……没有完美的解决方案:-)不过,您可以生成该代码以避免重复性。@Pierredebyl谢谢。我想解决办法是编写另一个Fortran程序,自动生成所有指针分配,将它们写入头文件,然后将头文件包含在程序中。在本例中,我仍然有这500行代码,但至少我不必自己编写它们。您甚至可以将代码复制粘贴到程序文件或模块子例程中。在某种程度上,会有一个对这500个例程的某种引用:-)