使用标量和数组进行重载

时间:2016-11-15 12:35:58

标签: arrays fortran overloading

我想从文本文件中读取数字。那些可以是标量或数组。

所以要么我打电话

real, dimension(2) :: test
call self%ReadRealToVariable('(2F10.0)',test)

real :: test
call self%ReadRealToVariable('(F10.0)',test)

导入功能类似于

subroutine ReadRealToVariable(self,Format,VarOut)
    implicit none

    ! Declaring Part
    class(FileImporter) :: self
    real, dimension(:), intent(out) :: VarOut
    character(len=*), intent(in) :: Format
    real, dimension(size(VarOut)) :: Value

    ! Executing Part
    call self%ReadValueToVariable(Format,Value)

end subroutine ReadRealToVariable

问题是,当我尝试导入标量时,我得到标量和等级(1)之间的维度不匹配。我完全理解为什么会出现这个问题。现在的问题是如何处理它:

  1. 有没有办法灵活地将变量分配给标量或数组?

  2. 或者我应该将所有标量初始化为real, dimension(1) :: test

1 个答案:

答案 0 :(得分:2)

为了回答人们可以看到的问题......

1)不,如果传递标量,单个例程将无法分配标量,如果传递了数组,则无法分配数组。可以将不同的例程包装在通用接口后面并使其显示,就像单个过程表现为OP所希望的那样。这可能就足够了。 OP似乎已经解决了这个问题,关于通用接口,可能还有其他几个问题,所以我不会在这里写更多关于这个主题的内容。

2)为了编写例程来读取文件中的值,人们当然可以将标量视为大小为1的排名1数组。是否有人希望在整个代码库中传播这一点我不确定。另一方面,我可以看到大小为1的排名1数组对于大小为0的数组有用的方式很有用,例如处理没有复杂条件的边缘情况。