如何用一种方法指向两种不同的方法?

时间:2019-04-13 17:47:00

标签: fortran gfortran intel-fortran

我打算将同一过程指向两个不同的过程,但是我没有Fortran的程序员经验,因此我需要帮助。 这是我的简单代码:

module types

  type :: type_one
    integer, private :: a1,a2
   contains
    procedure, public :: f_data => set_data_a1
    procedure, public :: f_data => cal_data_a2
  end type type_one

  private :: set_data_a1,cal_data_a2 

contains

integer function set_data_a1(this)
  class(type_one) :: this
  this%a1 = 2
end function set_data_a1

integer function calc_data_a2(this)
  class(type_one) :: this
  this%a2 = this%a1 + 3
end function calc_data_a2

end module types

program types_pro
  implicit none
  type(type_one) :: type_obj
  type_obj%f_data()
end program types_pro 

我收到此错误: `已经有一个绑定名称为'f_data'的过程,用于派生类型'type_one'|

是否可以使用type_obj%f_data()同时调用两个过程?

1 个答案:

答案 0 :(得分:2)

一个通用名称,例如您的f_data,允许使用相同名称调用具有不同输入签名(等级,类型,种类和参数数量)的过程。但是,由于它们具有相同的参数签名,因此编译器无法确定在代码调用calc_data_a1时执行calc_data_a2f_data中的哪个。

哪个问题带给我一个问题:您希望编译器或代码的行为如何?您要编译器做什么?(好,这是两个问题。)

通常,如果希望编译器执行两个过程,则必须进行两次调用。我想,如果要在一个过程被调用时同时运行,可以让一个过程调用另一个过程。

如果要将多个函数包装在同一个名称后面,则它们必须具有不同的输入签名,以便编译器可以确定要调用的函数。

很显然,我对这个答案的早期版本不够明确:

否,无法编写代码来执行两个不同的过程以响应对其中一个的调用。 (除非,一个被另一个调用。)此外,期望一个(过程)指针在任何时候指向多个目标都是不合理的。