我刚刚开始在 Fortran 2003 中重载运算符(包括赋值),并且我想为我的用户定义类型重载箭头运算符 (=>)。 我知道对于大多数运算符,比如 (+),我会说
interface operator(+)
! What I want this to mean instead
end interface operator
但是,这不适用于 (=>)。我知道作业,我会说
interface assignment(=)
! What I want this to mean instead
end interface assignment
这仍然不适用于 (=>)。
具体来说,我定义了一个类型,其中基础数据是指针。
type my_type
integer, pointer :: data(:)
end type my_type
所以,当我说
type (my_type) :: a
integer, target :: b(4)
! Do stuff to b
a => b
我希望这意味着
a%data => b
感谢您的任何建议! 2003 年标准以外的标准中的答案也会有所帮助。
最佳答案
在 Fortran 2018 中不可能重载指针赋值。
This question询问是否使用类型绑定(bind)过程来实现重载,但从更一般的意义上来说,答案仍然是否定的。
直到Fortran 2018,指针赋值语句的含义
a => b
始终影响左侧指针a
的指针状态。
虽然 Fortran 标准有内在和定义赋值(后者通过接口(interface)赋值(=)
引入),但没有这样的区别用于指针赋值。
关于pointers - Fortran 中重载箭头运算符 (=>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54895371/