使用对象函数在Fortran中进行回调

时间:2016-12-21 16:22:31

标签: oop callback fortran gfortran

我正在尝试将函数作为参数传递给另一个函数。当我尝试使用一个简单的功能时,它工作正常。但是当我尝试传递属于对象的函数时,我得到一个错误。这是在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中不支持的对象进行回调。如果是这样,我怎么能做这样的事情。

0 个答案:

没有答案