Оператор стрелки перегрузки (=>) в фортране - PullRequest
0 голосов
/ 27 февраля 2019

Я только начал перегрузку операторов (включая присваивание) в 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 голосов
/ 27 февраля 2019

Невозможно перегрузить присвоение указателя в Fortran 2018.

В этом вопросе задается вопрос об использовании процедур с привязкой к типу для подхода к перегрузке, но в более общем смысле ответ таков:все еще нет.

Вплоть до Fortran 2018 значение оператора присваивания указателя

a => b

всегда должно влиять на состояние указателя указателя a с левой стороны.

Хотя в стандарте Фортрана есть внутреннее и определенное назначение (последнее введено с interface assignment(=)), такого различия для назначения указателя нет.

...