liudy02 发表于 2018-11-8 14:43
参数化派生类型是个坑,
目前还不知道有哪个编译器能很好的支持所有参数化派生类型的标准,
我反正是放弃找 ...
lookbook 发表于 2018-11-8 16:38
感觉你就是大佬呀。。。
module m_a
implicit none
type :: bar(p, q)
integer, kind :: p=4
integer, len :: q=10
real(kind=p),dimension(q) :: x
contains
procedure:: barsub => barsub4 , barsub8
end type bar
contains
subroutine barsub4(this)
type(bar(p=4,q=*)), intent(in) :: this
write (*,*) this%q , this%p
end subroutine barsub4
subroutine barsub8(this)
type(bar(p=8,q=*)), intent(in) :: this
write (*,*) this%q , this%p
end subroutine barsub8
end module
Program Main
use m_a
type(bar(4,30)) :: x4_30
type(bar(4,20)) :: x4_20
type(bar(8,30)) :: x8_30
type(bar(8,20)) :: x8_20
call x4_30%barsub()
call x4_20%barsub()
call x8_30%barsub()
call x8_20%barsub()
End Program Main
楚香饭 发表于 2018-11-9 00:55
kind的参数必须要编译时确定,不能假定
len的参数可以假定。
所以,多个kind,就要写多个函数。
楚香饭 发表于 2018-11-9 11:16
不同的kind,需要用不同的函数。这是肯定的,毕竟二进制代码(指令)完全不同。
如果你有很高的通用编程需 ...
liudy02 发表于 2018-11-9 12:38
原来如此,版主的解释让我终于明了Kind参数和Len参数为什么在编程上有不同之处了
写成不同的Type寻找上应 ...
楚香饭 发表于 2018-11-9 00:55
kind的参数必须要编译时确定,不能假定
len的参数可以假定。
所以,多个kind,就要写多个函数。
lookbook 发表于 2018-11-9 15:58
其实有一个方法,只需要多一个module就行。就是在最底层定义一个kind常量,然后每个module都包含使用它即 ...
楚香饭 发表于 2018-11-9 00:55
kind的参数必须要编译时确定,不能假定
len的参数可以假定。
所以,多个kind,就要写多个函数。
lookbook 发表于 2018-11-15 22:08
版主您好,我去试了下,我的编译器(gfortran8)不行,错误提示是:
procedure:: barsub => barsub4 , ba ...
liudy02 发表于 2018-11-16 22:42
顺便说句,我终于现实解决了之前说的想定义不同kind但是功能几乎一样的类型,
甚至包括不同的数据类型,例 ...
vvt 发表于 2018-11-17 09:36
配合预处理,确实能实现更多语法不方便做的事情。
比如 Qt 的 moc,扩展了 C++ 的功能 ...
weixing1531 发表于 2018-11-17 11:05
改变精度必然要重新编译代码
这种花哨功能不实用
liudy02 发表于 2018-11-16 22:31
哈哈,版主也犯错了啊
把后面两个进程里对哑元定义的关键字TYPE换成CLASS应该就好了 ...
lookbook 发表于 2018-11-18 16:30
嗯,是个好办法。
不过我现在不太让shell完成太多东西了,程序能自己解决的就尽可能不用shell(大概是我 ...
lookbook 发表于 2018-11-18 16:36
我都试过,并不可以。
lookbook 发表于 2018-11-18 16:30
学习了,但是离开IDE是不是就不行了?
欢迎光临 Fortran Coder (http://bbs.fcode.cn/) | Powered by Discuz! X3.2 |