fortran - 如何在 Fortran 派生类型中存储对过程的引用
问题描述
我可以在 Fortran 类型中存储对过程的引用吗?
我的目标是通过将重复参数分组为一个类型来减少重复参数到 Fortran 子例程中。但是 Fortran 不允许我为外部程序执行此操作。
这是我尝试做的一个简化示例:
module my_functions
type mytype
external :: f
end type
contains
subroutine fa()
WRITE(*,*) "yiha"
end subroutine
subroutine fb(t)
type(mytype) t
call t%f()
end subroutine
end module
program test
use my_functions
type(mytype) :: m
m%f = fa
call fb(m)
end program
然而gfortran给了我
external :: f
1
Error: Unexpected attribute declaration statement at (1)
解决方案
派生类型可以将过程指针作为组件:
implicit none
type mytype
procedure(), pointer, nopass :: f
end type
type(mytype) m
external fa
m%f => fa
call m%f()
end
这种类型有一个带有隐式接口的过程,稍后将其作为子例程引用。因为它有一个隐式接口,nopass
所以指针需要该属性。
推荐阅读
- elasticsearch - Elasticsearch Kibana 中同一字段的多个通配符条件
- .net-core - 自定义 `AuthenticationStateProvider` 身份验证失败
- serverless-framework - 合并 serverless.yml 中的属性
- java - 使用 Java Streams 和 Spring Boot 的 RESTful Web 服务
- umbraco - 会员拥有的内容
- javascript - 如何获得可滚动的 div currentScrollY 和 totalScrollHeight
- javascript - 如何使用 Nest js 作为服务器端并在客户端反应从 puppeteer 下载 pdf?
- angular - 如何在没有角材料的情况下在我的表单中进行多项选择
- sql - 带有子句 NOT CONTAINS 的 SQL 选择查询
- python - Python Homebrew 升级后的非功能 pip