Fortran Coder

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

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

[复制链接]

178

帖子

15

主题

0

精华

大宗师

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

178

帖子

15

主题

0

精华

大宗师

F 币
4973 元
贡献
1152 点
沙发
发表于 2019-7-3 13:40:34 | 显示全部楼层
lookbook 发表于 2019-7-3 12:53
是的,不过在select type内部可以。
轻量级的代码或许能行

不懂,我现在渐渐觉得fortran确实没啥不可替代性了
似乎一般的数学库也都有C语言版了
甚至连python里的numpy,scipy之类的库都做的很好了
fortran的oop做的那么烂,语言设计也确实不太好,感觉自己主动去用没啥必要了
也就是需要用别人的代码时需要搞清楚一些看不懂的问题就ok了

178

帖子

15

主题

0

精华

大宗师

F 币
4973 元
贡献
1152 点
板凳
发表于 2019-7-3 17:02:32 | 显示全部楼层
lookbook 发表于 2019-7-3 16:22
你会多少种语言了?

老实说,一种也谈不上"会"啊
三四种都只是略知一点皮毛而已
但是fortran确实曾经用过很久,也花过不少功夫学习
确实发现曾经的优势都在慢慢消失,劣势却没有什么改善

178

帖子

15

主题

0

精华

大宗师

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

将一个数按位倒置,这个看起来不像是fortran这门语言设计的需求啊……
fortran设计的理念似乎一直是不要让用户去关心内部是怎么存储数据的
虽然后来引入了位操作函数,不也是不管实际存储情况,只是假设按固定位顺序存储设计的么?

178

帖子

15

主题

0

精华

大宗师

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

从你这个例子里,学到一点
就是想利用这一点的话,相当于一定程度上可以使得子进程的哑元确实就是 void *的指针
只是实际要运用的话,还是受制于子进程内部能实现什么样的无关类型的通用代码
感觉这个如果和自定义算符以及通用函数名确实还是有很实际的运用的
一定程度上可以实现类似模板,或者多态的功能

178

帖子

15

主题

0

精华

大宗师

F 币
4973 元
贡献
1152 点
6#
发表于 2019-7-3 22:53:12 | 显示全部楼层
本帖最后由 liudy02 于 2019-7-3 22:54 编辑
lookbook 发表于 2019-7-3 22:39
谢谢绝地,
但这个代码在gfortran下测试并不成功,c_f_pointer不接受多态的指针,pgi是可以的,我猜ivf也 ...

难道不是c_f_pointer这个子进程属于iso_c_binding这个内部模块?

用父类确实可以实现一定程度的多态,但我认为还是很不理想的
多态进程中涉及到的成员变量在某个子类里有变化可能就会要重载一堆方法
而且多数时候事情没那么复杂,可能就是想省码点包含基本运算的代码
结果却要层层设置类树,设置一堆运算符之类的,麻烦要死
所以我很欣赏有位大佬在这里推荐的在fortran里写模块的办法
只是那个办法也是建立在C预处理的基础上的
如果不是和C编译器继承在一起的fortran编译器,事情就麻烦的多了……

178

帖子

15

主题

0

精华

大宗师

F 币
4973 元
贡献
1152 点
7#
发表于 2019-7-4 13:34:24 | 显示全部楼层
lookbook 发表于 2019-7-4 11:05
我的本意是为什么要用c_f_pointer这个函数

我没用过c和 fortran的交互
印象中,似乎fortran 的位操作都是假操作,还限定整数类型
所以我虽然没看懂版主是怎么做的,但是应该是把fortran的指针和c的指针相互转换
然后利用c来不分类型地对位进行倒置
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-5 05:04

Powered by Tencent X3.4

© 2013-2024 Tencent

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