В Фортране возможно ли связать целое число с процедурой (подпрограммой или функцией)? - PullRequest
2 голосов
/ 08 октября 2019

Я пишу программу на Фортране для решения задач проекта Эйлера. В моей реализации каждая проблема представляет собой функцию, например:

character(len=20) function euler_problem_0001()
    use some_external_lib
    ...
end function euler_problem_0001

, и если я распечатаю функцию, я просто получаю ответ.

print *, euler_problem_0001()

Теперь я закончил довольно много задачи я нахожу это немного утомительным, чтобы писать print *, euler_problem_xxxx() снова и снова. Итак, мои вопросы: Есть ли способ, которым я могу создать производный тип, который мог бы связать целое число (номер проблемы) с фактической процедурой? Что-то вроде

type, public :: int_to_proc
    character(len=:) :: proc_name 
    procedure(proc_x), pointer :: proc_p 
end type int_to_proc

, такчто если я инициализирую тип целым числом

call int_to_proc%init(2)

, то указатель на процедуру с привязкой к типу будет указывать на функцию euler_problem_0002(). В этом случае мне нужно только написать цикл, подобный этому

type(int_to_proc) :: prob

do i = 1, 500
    call prob%init(i)
    print *, prob%proc_p()
end do 

вместо записи 500 строк print *, euler_problem_xxxx(). Кроме того, любой обходной путь также приветствуется. Спасибо!

...