gpt4 book ai didi

function - 延迟绑定(bind)过程的 Fortran 2003 实现是否需要相同的参数?

转载 作者:行者123 更新时间:2023-12-02 01:57:09 25 4
gpt4 key购买 nike

我试图在模块内部创建一个抽象类型

type, abstract :: AbsType
contains
procedure (Compute_AbsSize), deferred :: AbsSize
end type AbsType
abstract interface
function Compute_AbsSize(this)
import AbsType
double precision Compute_AbsSize
class(AbsType)::this
end function Compute_AbsSize
end interface

type, extends(AbsType) :: ConcrType
type(Var), dimension(4) :: Nodes ! coming from a module
contains
procedure :: AbsSize => ConcrTypeSize
end type ConcrType

contains

function ConcrTypeSize(this)
double precision ConcrTypeSize
class (ConcrType):: this !
end function ConcrTypeSize

事实证明,如果我写

function ConcrTypeSize(TheConcrType)
double precision ConcrTypeSize
class (ConcrType):: TheConcrType !
end function ConcrTypeSize

编译器 (gcc) 提示 TheConcrType 应该与延迟函数的变量同名。我找不到此信息,有谁知道我为什么必须这样做,这是正确的吗?

编辑:我把问题的最后一部分移到了 this new question

最佳答案

覆盖父类型中特定绑定(bind)的扩展中的特定绑定(bind)必须具有名称和特征匹配的虚拟参数,禁止传递参数的类型(如果有)。这在F2008标准的4.5.7.3节中有解释(F2003中的类似词)。

因此,编译器的提示是正确的。请记住,在引用过程时可以使用伪参数的名称,也可以在绑定(bind)的 PASS 属性中使用。在这些上下文中,参数名称的不匹配没有意义。

关于你的最后一段,我不清楚你到底想要什么,或者这与问题的前一部分有什么关系。但是,请注意组件可以分配。每个具有可分配组件的类型对象都可以将组件分配给不同的大小。类似地,虽然绑定(bind)过程中的伪参数必须具有匹配的特征,而伪参数的特征是它的形状,但该形状可以假定为形状。

关于function - 延迟绑定(bind)过程的 Fortran 2003 实现是否需要相同的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19390401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com