Перегрузка различными процедурами интерфейса в Фортране - PullRequest
0 голосов
/ 17 января 2019

Скажем, у вас есть две подпрограммы, которые имеют разные интерфейсы, и у вас есть два типа, каждый из которых соответствует одной из процедур.

type, abstract :: base
 contains 
 procedure :: pointer_to_routine
 end type base 

 type, extends(base) :: first_case
 contains 
 procedure :: pointer_to_routine => first_case_routine
 end type first_case 

 type, extends(base) :: second_case
 contains 
 procedure :: pointer_to_routine => first_sec_routine
 end type second_case 

Так что это недопустимый код на Фортране, но это своего рода идеяЯ хочу делать.Если бы подпрограммы имели схожие интерфейсы, я мог бы определить атрибут abstract interface и deferred в объявленном базовом типе.Но так как мои две подпрограммы имеют разные интерфейсы, я не уверен, как это может сработать.

По сути, для одной подпрограммы требуется больше входных данных, чем для другой, поэтому одним из решений было бы добавить оставшиеся входные данные как просто фиктивные входные данные,хотя, это может вызвать некоторую путаницу, и мне интересно, есть ли более удобное решение.

1 Ответ

0 голосов
/ 17 января 2019

Все решения, которые вы можете придумать для этого, будут обходными путями. Язык просто разработан таким образом, чтобы все процедуры с тем же именем привязки, что и в родительском типе, имели одинаковый интерфейс. Обратите внимание, что другие языки имеют похожие проблемы / функции Метод переопределения с другой сигнатурой .

Вы можете использовать фиктивные аргументы, если знаете, что они понадобятся в целом, но не в конкретном случае. Они могут быть необязательными аргументами. Вы также можете сделать входные аргументы содержащимися в полиморфном производном типе. Это принесет новые проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...