在fortran中重载箭头运算符(=>)

时间:2019-02-26 22:42:56

标签: 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年标准之外的其他标准答案也将有所帮助。

1 个答案:

答案 0 :(得分:1)

在Fortran 2018中不可能重载指针分配。

This question询问使用类型绑定过程来解决重载问题,但从更一般的意义上讲,答案仍然是否。

在Fortran 2018之前,指针分配语句的含义

a => b

总是会影响左侧指针a的指针状态。

尽管Fortran标准具有内部定义的分配(后者由interface assignment(=)引入),但指针分配没有这种区别。