Конструкторы в Фортране - PullRequest
0 голосов
/ 25 октября 2018

У меня есть 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 .Почему я не назвал их только Конструктор , так как они находятся в разных сферах модулей, они не должны перегружать друг друга?Я пытался дать им то же имя, но потом я получаю сообщение об ошибке при вызове конструктора в коде клиента.-> Это означает, что для каждого класса я должен был добавить дополнительный суффикс после «Конструктора».

Я хотел бы иметь возможность, независимо от количества различных классов, использовать только Конструктор слово для строительства объекта в каждом классе.Но в клиентском коде для создания объекта я буду использовать точное имя этого типа.Это возможно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...