Gostaria de armazenar um ponteiro para uma função como um atributo c/em um tipo. Mas o compilador reclama que o primeiro argumento para a função deve ser o tipo (como o argumento self
or em linguagens como Python ou C++). Mas o atributo é apenas um ponteiro - nãothis
é parte do tipo.
Aqui está um código:
module my_mod
implicit none
public :: my_type
abstract interface
! INTERFACE I WANT TO POINT TO
subroutine my_interface(arg)
real, intent(in) :: arg
end subroutine my_interface
end interface
type :: my_type
! MY TYPE DEFINITION
real :: my_variable
procedure(my_interface), pointer :: my_fn_pointer
end type my_type
interface my_type
! "CONSTRUCTOR" INTERFACE FOR MY TYPE
module procedure init_my_type
end interface
contains
type(my_type) function init_my_type(arg1, arg2)
! ACTUAL "CONSTRUCTOR" FOR MY TYPE
real, intent(in) :: arg1
procedure(my_interface) :: arg2
init_my_type%my_variable = arg1
init_my_type%my_fn_pointer => arg2
end function init_my_type
end module my_mod
O erro real que recebo (compilador ifort) é:
erro #8262: Para um procedimento vinculado ao tipo que tem o atributo de vinculação PASS, o primeiro argumento fictício deve ter o mesmo tipo declarado que o tipo que está sendo definido.
Não entendo por que ele pensa que a interface para a qual quero apontar é um procedimento vinculado ao tipo.
Alguma dica?