Нужен ли явный интерфейс для выделения компонента производного типа в подпрограмме?

У меня есть производный тип:

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. Для этого вам не нужен явный интерфейс, просто подойдет ассоциация использования для определения типа. Вы передаете не массив, а структуру вокруг него.

Другие вопросы по тегам