0

引数の順序だけが異なる 2 つのルーチンがありますが、それらをインターフェイス経由で使用して、呼び出されたときに引数の順序に従って適切なルーチンが呼び出されるようにしたいと考えています。コンパイラは、それらを区別できないと不平を言います。私の推測では、呼び出し時に名前付き引数の構文を使用すると、どれを呼び出すかがわからないためです。1 つの回避策は、引数に別の名前を使用することですが、名前付き引数の呼び出しスタイルを無効にする方法があるかどうか疑問に思っていました。

例、これは私が処理しようとしている状況です

module Foo

    interface Bar
        module procedure Bar1
        module procedure Bar2
    end interface

contains
    subroutine Bar1(i,r)
        integer, intent(in) :: i
        real, intent(in) :: r
        print *, "bar1"
    end subroutine
    subroutine Bar2(r,i)
        real, intent(in) :: r
        integer, intent(in) :: i
        print *, "bar2"
    end subroutine

end module

program fuux
    use Foo
    integer :: i
    real :: r

    r = 5.0
    i = 3

    call Bar(i,r) ! note that if I call Bar(i=i, r=r) the compiler cannot disambiguate
                  ! so it will complain at the interface statement
end program
4

1 に答える 1

1

あなたが提案したことを行う方法、または「名前付き引数の呼び出しスタイルを無効にする」というフレーズで提案していると思うことを行う方法を知りません。この回答が何らかの形で激怒、失望、または不愉快な場合は、いくつかのコードを投稿してください。あなた。

編集

あなたがやりたいことをするための直接的な方法は頭に浮かびません。bar私が思いついた最初の回避策は、一連の引数を正規の順序で取り、適切な順序で引数を使用してbar1, bar2(および定義したい他の赤ちゃん) を呼び出すサブルーチンを定義することです。bars

于 2012-04-19T08:52:01.213 に答える