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

问题描述 投票:0回答:1

我打算用相同的程序指向两个不同的程序,但我没有在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()同时调用这两个程序?

fortran gfortran intel-fortran
1个回答
2
投票

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

这让我想到了一个问题:您如何期望编译器或代码的行为?您希望编译器做什么? (好的,这是两个问题。)

作为一般规则,如果您希望编译器执行两个过程,则必须进行两次调用。我想,如果你想在调用一个程序时运行它们,你可以调用另一个程序。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.