У меня есть 2 подкласса - ResultsPublisherInitial & ResultsPublisherFinal, оба расширяющих абстрактный класс ResultsPublisher.
Абстрактный класс имеет вид:
type, public, abstract:: ResultsPublisher
type(LAConstraintManagementResults), public, pointer:: lacmResults => null()
type(LACM_InputModel), public, pointer:: inputModel => null()
type(LACM_ForecastResults), public, pointer:: forecast => null()
end type ResultsPublisher
Тогда у меня есть 2 подкласса - ResultsPublisherInitial & ResultsPublisherFinal, каждый из которых содержитКонструктор:
type, public, extends(ResultsPublisher):: ResultsPublisherInitial
type(LACM_Model), public, pointer:: lacmModel => null()
end type ResultsPublisherInitial
interface ResultsPublisherInitial
procedure:: ConstructorInitial
end interface
contains
type(ResultsPublisherInitial) function ConstructorInitial(lacmResults, inputModel, forecast, lacmModel)
type(LAConstraintManagementResults), pointer:: lacmResults
type(LACM_InputModel), pointer, intent(in):: inputModel
type(LACM_ForecastResults), pointer, intent(in):: forecast
type(LACM_Model), pointer, intent(in):: lacmModel
ConstructorInitial%lacmResults => lacmResults
ConstructorInitial%inputModel => inputModel
ConstructorInitial%forecast => forecast
ConstructorInitial%lacmModel => lacmModel
end function
-----------------
!
type, public, extends(ResultsPublisher):: ResultsPublisherFinal
type(LR_Model), public, pointer:: lrModel => null()
end type ResultsPublisherFinal
interface ResultsPublisherFinal
procedure:: ConstructorFinal
end interface
contains
type(ResultsPublisherFinal) function ConstructorFinal(lacmResults, inputModel, forecast, lacmModel)
type(LAConstraintManagementResults), pointer:: lacmResults
type(LACM_InputModel), pointer, intent(in):: inputModel
type(LACM_ForecastResults), pointer, intent(in):: forecast
type(LACM_Model), pointer, intent(in):: lacmModel
ConstructorFinal%lacmResults => lacmResults
ConstructorFinal%inputModel => inputModel
ConstructorFinal%forecast => forecast
ConstructorFinal%lacmModel => lacmModel
end function
Как видите, у меня есть 2 конструктора для каждого конкретного типа, представленные через процедуру интерфейса.Имена этих процедур: ConstructorInitial и ConstructorFinal .Почему я не назвал их только Конструктор , так как они находятся в разных сферах модулей, они не должны перегружать друг друга?Я пытался дать им то же имя, но потом я получаю сообщение об ошибке при вызове конструктора в коде клиента.-> Это означает, что для каждого класса я должен был добавить дополнительный суффикс после «Конструктора».
Я хотел бы иметь возможность, независимо от количества различных классов, использовать только Конструктор слово для строительства объекта в каждом классе.Но в клиентском коде для создания объекта я буду использовать точное имя этого типа.Это возможно?