Fortran Coder

查看: 18970|回复: 18
打印 上一主题 下一主题

[面向对象] 一个关于无类型指针的问题

[复制链接]

79

帖子

17

主题

0

精华

专家

齊天大聖

F 币
433 元
贡献
266 点
跳转到指定楼层
楼主
发表于 2019-7-3 00:39:30 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
书上看到class(*)这么一个东西,
于是自己像下面这样使用


...

type(balabala) :: father

class(*),allocatable :: temp

allocate(temp,source=father)

...

但发觉死活不行,无论gfortran还是pgi

后来才领悟,原来class(*)类型的变量/指针只能在select type内使用。

突然觉得这东西局限很大啊,在此记录一笔,也供大家参考。


分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

79

帖子

17

主题

0

精华

专家

齊天大聖

F 币
433 元
贡献
266 点
沙发
 楼主| 发表于 2019-7-3 12:53:44 | 显示全部楼层
liudy02 发表于 2019-7-3 07:31
我还没注意还有这个呢
你是原本以为可以有C里边void *那种神奇的功能?

是的,不过在select type内部可以。
轻量级的代码或许能行

79

帖子

17

主题

0

精华

专家

齊天大聖

F 币
433 元
贡献
266 点
板凳
 楼主| 发表于 2019-7-3 16:22:06 | 显示全部楼层
liudy02 发表于 2019-7-3 13:40
不懂,我现在渐渐觉得fortran确实没啥不可替代性了
似乎一般的数学库也都有C语言版了
甚至连python里的nu ...

你会多少种语言了?

79

帖子

17

主题

0

精华

专家

齊天大聖

F 币
433 元
贡献
266 点
地板
 楼主| 发表于 2019-7-3 22:39:48 | 显示全部楼层
fcode 发表于 2019-7-3 18:10
class(*) 有挺多妙用的呀。
对于一些函数里不对输入数据进行操作,直接传递出去的,都可以用它。

谢谢绝地,
但这个代码在gfortran下测试并不成功,c_f_pointer不接受多态的指针,pgi是可以的,我猜ivf也是可以的吧。
还有请问为什么要用iso_c_binding?这段没有太明白。

后来我记起来了,fortran用父类指针也能实现一定的多态性质,只要顶层的接口设计好。

79

帖子

17

主题

0

精华

专家

齊天大聖

F 币
433 元
贡献
266 点
5#
 楼主| 发表于 2019-7-4 11:05:45 | 显示全部楼层
liudy02 发表于 2019-7-3 22:53
难道不是c_f_pointer这个子进程属于iso_c_binding这个内部模块?

用父类确实可以实现一定程度的多态,但 ...

我的本意是为什么要用c_f_pointer这个函数

79

帖子

17

主题

0

精华

专家

齊天大聖

F 币
433 元
贡献
266 点
6#
 楼主| 发表于 2019-7-7 15:01:55 | 显示全部楼层
weixing1531 发表于 2019-7-6 21:41
楼主的设想还是可以实现的
只是class(*)多态指针p的断开引用必须在select type内部才行     
  但Fortran20 ...

我没明白你的意思,看了下代码,这还是要在select type里才能进行操作(包括绑定的过程的调用)啊。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-5 13:44

Powered by Tencent X3.4

© 2013-2024 Tencent

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