【发布时间】:2013-11-18 17:33:03
【问题描述】:
我有一个关于在 Fortran 中编程用户定义运算符的正确方法的问题。更具体地说,我将提供我的问题的示例。我正在为名为“粒子”的球形粒子创建用户定义的数据类型。我想定义一个运算符,它采用现有的 Particle 对象数组并向其中添加一个新的 Particle 对象。我想知道如何定义用户定义的运算符来执行这样的操作。
目前,在 Particle 的类型定义中,我有以下几行:
procedure, public:: addNewParticleTo
generic:: operator(.spawn.) => addNewParticleTo
接下来,我有一个子程序,定义如下:
subroutine addNewParticleTo(a_LHS, a_RHS)
implicit none
class(Particle), dimension(:), allocatable, intent(in):: a_LHS
class(Particle), dimension(:), allocatable, intent(inout):: a_RHS
<rest of the code>
end subroutine addNewParticleTo
我打算将运算符调用为:
particle .spawn. particleArray
我想知道这是否是这样做的正确方法。对此的任何建议或建议都会非常有帮助。
【问题讨论】:
-
我的印象是
operator需要function,而不是subroutine。 -
您能否建议我如何定义相应的函数来定义这样的运算符?我想我之前已经使用过这样的构造来重载赋值运算符来创建复制构造函数 - 我在那里使用过子例程。
-
您应该能够通过简单地将
subroutine与function交换然后使用NewparticleArray = particle .spawn. OldparticleArray来做到这一点。
标签: fortran user-defined-functions fortran90 user-defined-types fortran95