我正在尝试将函数作为参数传递给另一个函数。当我尝试使用一个简单的功能时,它工作正常。但是当我尝试传递属于对象的函数时,我得到一个错误。这是在Fortran中重新创建问题的简单代码。
module classb
use iso_c_binding
implicit none
type :: fr
integer(c_int) :: order
contains
procedure, pass :: get_val
procedure, nopass :: fn
end type fr
contains
subroutine get_val(this)
class(fr), intent(inout) :: this
write(*, *) this%order
end subroutine get_val
function fn(a) result(b)
integer(c_int), intent(in) :: a
integer(c_int) :: b
b = 2*a
end function fn
end module classb
module callb
use iso_c_binding
use classb
implicit none
interface
function func(a) result(b)
use iso_c_binding
implicit none
integer(c_int), intent(in) :: a
integer(c_int) :: b
end function func
end interface
contains
subroutine do_call_b(f, a)
procedure(fn) :: f
integer(c_int) :: a
write(*, *) f(a)
end subroutine do_call_b
subroutine get_value()
type(fr) :: f
f = fr(order = 1)
call f%get_val()
call do_call_b(f%fn, 1)
end subroutine get_value
end module callb
program main
use callb
call get_value()
end program main
我收到错误
call do_call_b(f%fn, 1)
1
Error: Expected argument list at (1)
是否使用Fortran中不支持的对象进行回调。如果是这样,我怎么能做这样的事情。