我有两个例程,它们的区别仅在于参数的顺序,但是我想通过一个接口使用它们,以便在调用时根据参数的顺序调用正确的例程。编译器抱怨它无法区分它们,我的猜测是因为如果我在调用时使用命名参数的语法,它将不知道调用哪一个。一种解决方法是为参数使用不同的名称,但我想知道是否有办法禁用命名参数调用样式。
例如,这是我试图处理的情况
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
答案 0 :(得分:1)
我不知道有什么方法可以做你的建议,或者更确切地说,在“禁用命名参数调用样式”这个短语中做我认为你建议的事情。如果这个答案激怒,令人失望或不喜欢,发布一些代码,我们(我的意思是,我没有太多的空气和优点,很少使用皇家'我们')可能会提出一个狡猾的技巧,这将取悦你。
修改强>
没有直接的方法来做你想做的事情。我遇到的第一个问题是定义一个名为bar
的子程序,它以规范的顺序接受一系列参数,只需调用bar1
,bar2
(以及任何其他宝贝{{1}使用适当顺序的参数来定义)。