pointers - Fortran 中重载箭头运算符 (=>)

标签 pointers fortran operator-overloading overloading

我刚刚开始在 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/

相关文章:

c++ - 返回指向数组的指针或使用参数创建 void 函数

c++ - 为什么不能给指针赋值?

c++ - 为什么我重载的逗号运算符没有被调用?

c++ - 如何重载赋值运算符以允许我的类等于原始类型,例如 'int'

c - 如何修复从 C 中的函数传递指针的段错误?

python - 如何访问用 Python 编写的 FORTRAN 函数?

c - 如何将Fortran语言中的RECORD转换为C语言?

memory - MPI Fortran 代码 : how to share data on node via openMP?

c++ - 无法将 int 类型转换为时间类型(我的类(class)类型)

c - 在C中访问数组内的结构体字段