存储“指向函数的指针”。在 Fortran 语言中?
在 Fortran 中,您可以将函数/子例程 A 作为参数传递给另一个函数/子例程 B,但是您可以存储 A 以供以后检索和使用吗?
例如,这在 C 中是允许的。
int foo(float, char, char) { /*whatever*/};
int (*pointerToFunction)(float, char, char);
pointerToFunction = foo;
在 Fortran 中,您可以将子例程作为参数传递
subroutine foo
! whatever
end subroutine foo
subroutine bar(func)
call func
end subroutine bar
program x
call bar(foo)
end program
,但是如何以与 C 类似的方式存储 foo 的地址?
In Fortran, you can pass a function/subroutine A as an argument to another function/subroutine B, but can you store A for later retrieval and use?
for example, this is allowed in C
int foo(float, char, char) { /*whatever*/};
int (*pointerToFunction)(float, char, char);
pointerToFunction = foo;
In Fortran you can pass a subroutine as an argument
subroutine foo
! whatever
end subroutine foo
subroutine bar(func)
call func
end subroutine bar
program x
call bar(foo)
end program
but how can you store the address of foo in a similar way to C ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
从所谓的“Fortran 2003”(ISO/IEC 1539-2004)开始,过程指针是 Fortran 语言的一部分。这绝对是 Fortran 语言的主要新特性之一。
用法来自 Fortran Wiki 的 示例。
Stefano,你提到了策略设计模式。在Fortran 2003中您可以使用纯OOP方式来实现它(无需过程指针)。临时示例:
strategies.f90
cars.f90
main.f90
至少可以使用 gfortran 4.6 (20100925)。
Starting from so-called "Fortran 2003" (ISO/IEC 1539-2004) procedure pointers is a part of the Fortran language. It's definitely of the major new features of Fortran language.
Usage example from Fortran Wiki.
Stefano, you mentioned strategy design pattern. In Fortran 2003 you can use pure OOP way to implement it (without procedure pointers). Offhand example:
strategies.f90
vehicles.f90
main.f90
At least works using gfortran 4.6 (20100925).
以下代码演示了如何使用过程指针:
The following codes demonstrate how to use procedure pointers: