Fortran Coder

查看: 10312|回复: 9
打印 上一主题 下一主题

[面向对象] 过程绑定中的通用接口冲突问题

[复制链接]

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
楼主
发表于 2020-8-11 08:43:06 | 显示全部楼层
本帖最后由 kyra 于 2020-8-11 08:45 编辑

编译器在 generic name 中选择合适的interface procedure 调用。发生在编译时,而不是发生在运行时。
只有编译时能确定的区别,才能使用 generic name 重载。比如参数的类型,精度,数组维度,参数的个数,顺序。

而数组的大小,以及变量的值。在编译时无法确定。
比如
read(*,*) i , j
call test2( a(i:j) )
编译时无法确定 a 的大小。

顺带一提:你在m_haha里写了 implicit none ,那么这个module下面contains的procedure(test2 , test3)就不需要再写 implicit none 了。

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
沙发
发表于 2020-8-11 17:42:44 | 显示全部楼层
lookbook 发表于 2020-8-11 16:42
如果输入是a(:),那么出现ambiguous我认,但a(4),a(3)显然在编译的时候是应当可以被确定的。
module中的 ...

你说的“实际输入变量大小和哑元大小不符合时就会报错”,是运行时错误,也是在运行时才做的检查。
但决定test实际调用的是test2还是test3,需要“编译时”就决定。

常规的 Type-Bound Procedures,都是编译时决定,调用哪个Procedure。
运行时决定的也有,类似C++的虚函数或者fortran的abstract interface。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-3 02:11

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表