Fortran函数重载

时间:2015-10-27 00:41:02

标签: interface fortran overloading

有没有办法在Fortran中执行以下操作,而无需为每个维度数组明确执行此操作?

Module OverloadTest
  interface arrayStuff
    module procedure :: arrayStuff_NxN, arrayStuff_2x2
  end interface

  contains

  function arrayStuff_NxN(A) result(output)

    real*8,dimension(:,:) :: A
    real*8, dimension(size(A,1), size(A,2)-1) :: output

    !code and stuff to populate output

  end function arrayStuff_NxN

  function arrayStuff_2x2(A) result(output)

    real*8,dimension(:,:) :: A
    real*8 :: output

    !code and stuff to populate output

  end function arrayStuff_2x2
End Module OverloadTest

为了澄清我希望能够调用arrayStuff函数,如果它是一个2x2数组我想要它选择2x2并且对于所有其他尺寸选择NxN而不必专门为3x3,4x4制作函数,5x5,等等。

1 个答案:

答案 0 :(得分:1)

不是我所知道的,因为(2,2)形状也会匹配(:,:)形状。

我能推荐的最好的方法是只有NxN功能,如果遇到2x2数组,则将其传递给特殊功能。

然后,作为输出,将其放入size(1)数组中。