用标量和数组重载

Overloading with scalars and arrays

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

所以要么我打电话给

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

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

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

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

为了让人们能够看到问题的答案...

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

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