Я пишу программу на Фортране для решения задач проекта Эйлера. В моей реализации каждая проблема представляет собой функцию, например:
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()
. Кроме того, любой обходной путь также приветствуется. Спасибо!