在Fortran中定义和调用构造函数

时间:2018-10-11 09:55:03

标签: oop types interface fortran

我不知道如何为类定义简单的构造函数。我想做的是在mytype中分配一个数组,然后在主程序中填充它。

我有什么?

module types
    implicit none

    type mytype
        real, allocatable :: someArray(:)
    end type mytype

    interface
        module procedure :: init
    end interface

contains
    subroutine init(this)
        class(mytype), intent(inout) :: this
        allocate( this%someArray(5) )
    end subroutine init
end module types

program test
  use types
  implicit none

  type(mytype) :: array

  call array%init
  do i=1, 5
    array%someArray(i) = real(i)
    print *, array%someArray(i)
  end do
end program test

编译时出现错误

  

错误:(1)处的MODULE PROCEDURE必须在通用模块接口中

那是什么意思?如何定义通用模块接口

谢谢!

1 个答案:

答案 0 :(得分:2)

用户提供的构造函数的语言模型是具有与类型相同的标识符的泛型函数,仅返回该类型的对象。除了具有与类型同名的泛型之外,这没什么特别的。

const mapDispatchToProps = (dispatch) => {
  return {
    ...bindActionCreators({appSubmitStart, appSubmitStop}, dispatch), 
    dispatch
  };
};

(鉴于该语言的其他方面,例如参数化类型,数组构造函数,自动分配甚至内置结构构造函数的开箱即用功能,该示例在某种程度上毫无意义。)

来自编译器的错误消息可能意味着引用通用接口,因为仅在通用接口块中允许使用过程语句。

特定类型绑定过程引用-语法为module types implicit none type mytype real, allocatable :: someArray(:) end type mytype interface mytype module procedure :: init end interface ! init would typically be private. contains function init() type(mytype) :: this allocate( this%someArray(5) ) ! Non-pointer function result must be defined. this%someArray = 0 end function init end module types program test use types implicit none type(mytype) :: x x = mytype() do i=1, 5 x%someArray(i) = real(i) print *, x%someArray(i) end do end program test 的事物-通常在以下情况下使用:父类型具有带有特定签名的方法(伪参数集,禁止传递的参数)的父类型,并且您想要覆盖扩展中的该方法,即调用具有相同签名的其他过程。构造函数不适合这种情况-通常需要传递给构造函数的信息(即调用的签名)是特定于类型的。