Class 可以用Fortran调用类实例吗?

Class 可以用Fortran调用类实例吗?,class,oop,fortran,callable,Class,Oop,Fortran,Callable,我有一个多项式类TPoly,请参见下面的代码,它采用系数数组coefs,并使用eval方法在某个点x计算多项式。我想知道是否可以通过使实例p可调用来直接计算多项式,即使用p%eval(x)而不是p(x)。在Python中,可以通过定义\uuuu call\uuu方法来实现理想的行为。Fortran中是否存在类似的东西 我想创建另一个类,它将包含许多TPoly属性,并且我希望避免组件选择的链接object%poly1%eval(x)。指向类方法的函数指针可以解决我的问题,但我发现这是不可能的,请参

我有一个多项式类
TPoly
,请参见下面的代码,它采用系数数组
coefs
,并使用
eval
方法在某个点
x
计算多项式。我想知道是否可以通过使实例
p
可调用来直接计算多项式,即使用
p%eval(x)
而不是
p(x)
。在Python中,可以通过定义
\uuuu call\uuu
方法来实现理想的行为。Fortran中是否存在类似的东西

我想创建另一个类,它将包含许多
TPoly
属性,并且我希望避免组件选择的链接
object%poly1%eval(x)
。指向类方法的函数指针可以解决我的问题,但我发现这是不可能的,请参阅


不幸的是,不,这是不可能的。据我所知,也没有很好的方法来模拟这种行为

如果可能的话,它需要避免与Fortran的数组访问语法冲突。考虑以下事项:

program main
  use polymod
  implicit none
  
  ! Declare an array of type TPoly.
  type(TPoly) :: p(1)
  
  ! Initialise the array.
  p = [TPoly(coefs=[3.0_rp, -1.0_rp, 1.0_rp])]
  
  ! Try to print.
  print *, p(1)
end program
编译器无法区分
p(1)
引用数组的第一个元素
p
p(1)
调用类函数作为
元素
函数,作用于
p
的每个元素,参数为
1


对于非基本函数,您可以区分这两种语法,但您需要一些语法,如
p(1)(2.0_rp)
,而这种语法在Fortran中并不存在。

x(…)(…)
这样的语法存在,在Fortran中至少意味着两种不同的东西。@francescalus wait,真的吗?你能举个例子吗?如果是的话,我很乐意修改我的答案…@francescalus啊,是的,你是对的:Fortran 2018标准草案,第130页:
B(1)(1:5)
提到“数组元素作为父字符串”。我会修改我的答案,谢谢。数组元素子字符串;带类型参数的结构构造函数。@veryreverie太糟糕了,这会很方便。谢谢你的回复。
program main
  use polymod
  implicit none
  
  ! Declare an array of type TPoly.
  type(TPoly) :: p(1)
  
  ! Initialise the array.
  p = [TPoly(coefs=[3.0_rp, -1.0_rp, 1.0_rp])]
  
  ! Try to print.
  print *, p(1)
end program