首页 > 解决方案 > fortran 中的构造函数

问题描述

我有 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 个构造函数,通过接口过程引入。这些过程的名称是ConstructorInitialConstructorFinal。为什么我没有将它们命名为Constructor,因为它们在不同的模块范围内,它们不应该互相重载?我试图给它们起相同的名称,但是在客户端代码中调用构造函数时出现错误。-> 这意味着对于每个类,我必须在“构造函数”之后添加额外的后缀。

我希望可以选择,无论有多少不同的类,在每个类中只使用构造器词来构造对象。但是在用于创建对象的客户端代码中,我将使用该类型的确切名称。这可能吗?

标签: fortran

解决方案


推荐阅读