Я пытался создать внутри модуля абстрактный тип
type, abstract :: AbsType
contains
procedure (Compute_AbsSize), deferred :: AbsSize
end type AbsType
abstract interface
function Compute_AbsSize(this)
import AbsType
double precision Compute_AbsSize
class(AbsType)::this
end function Compute_AbsSize
end interface
type, extends(AbsType) :: ConcrType
type(Var), dimension(4) :: Nodes ! coming from a module
contains
procedure :: AbsSize => ConcrTypeSize
end type ConcrType
contains
function ConcrTypeSize(this)
double precision ConcrTypeSize
class (ConcrType):: this !
end function ConcrTypeSize
Оказывается, если я напишу
function ConcrTypeSize(TheConcrType)
double precision ConcrTypeSize
class (ConcrType):: TheConcrType !
end function ConcrTypeSize
компилятор (gcc) жалуется, что TheConcrType должен иметь то же имя переменной отложенной функции. Я не смог найти эту информацию, кто-нибудь знает, почему я должен это делать, и правильно ли это?
Изменить: я переместил последнюю часть вопроса в этот новый вопрос