Нужен ли явный интерфейс для выделения компонента производного типа в подпрограмме?
У меня есть производный тип:
module foo
type bar
integer, allocatable, dimension(:) :: data
end type bar
end module foo
Теперь я хотел бы выделить bar
данные в подпрограмме без явного интерфейса:
program main
use foo
type(bar) :: mybar
call alloc_my_bar(10,mybar)
print*, mybar
end program
subroutine alloc_my_bar(n,mybar)
use foo
type(bar) :: mybar
integer :: n
allocate(mybar%data(n))
mybar%data = 42
end subroutine alloc_my_bar
Это, кажется, работает очень хорошо с ifort
, но я знаю, что если бы mybar не был частью определенного пользователем типа, мне бы потребовался явный интерфейс... Устраняет ли помещение выделенного массива в определенный пользователем тип необходимость явного интерфейса? С какой версией стандарта Fortran этот код совместим (F90, F95, F2003 ...), если таковой имеется?
1 ответ
Решение
Распределяемые компоненты определены в TR15581-F95, который был включен в стандарт Fortran 2003. Для этого вам не нужен явный интерфейс, просто подойдет ассоциация использования для определения типа. Вы передаете не массив, а структуру вокруг него.