问题标签 [fortran2008]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
json - 如何有效地将复杂的 Fortran 结构保存到二进制文件中?
所以,我需要在 Fortran 2008 中实现我的新项目。在这个项目中,我需要存储大型结构,我想以二进制格式存储它们。到目前为止,我已经在这里阅读了有关未格式化和格式化的二进制流的信息,但是对于如何使用它们来存储比多个数字/字符串更复杂的东西,我仍然有些困惑。
假设我将以 JSON 格式存储我的数据:
我知道,我可以使用一些 3rd 方模块直接使用 JSON(比如这个),但我也希望能够使用二进制格式,因为文件大小可能非常大。
那么,是否可以使用 Fortran 二进制流存储这种结构?或者在Fortran中有没有其他方法,怎么做?我不是专门询问未格式化的二进制文件,如果有其他优雅的解决方案,我会很高兴听到它。不过,我更喜欢没有很多外部依赖的那些。
fortran - Fortran 2008 中的函数重载
我从 Fortran 2008 开始,我在 OOP 方面遇到了很大的困难。似乎很少有材料可以解释 2008 语言标准中一个非常基本的 OOP 概念。
我找到了有关继承的信息,但找不到有关多态性的任何信息。
因此,如果我想在 C++ 中重载一个函数,我可以这样做(来自 Wikipedia 的示例):
但是,我应该如何在 Fortran 2008 中做同样的事情?
function - 使用 Iso_Fortran_Env 设置函数的 Kind 值
如何使用 ISO Fortran Env 的内在函数以 Fortran 2008 惯用的方式设置函数的返回 KIND 值?
通常在主程序中,我可以使用 ISO Fortran 内部函数,如下所示:
但是似乎没有一种方便的方法可以将这些内在函数用于外部函数,因为 REAL64 和 double 都只能在上面的 main 函数中定义。尝试在 main 中定义函数的 KIND 如下:
至少在我的系统上,会引发类型不匹配错误(double 被定义为 KIND=8,而默认 real 在我的系统上被定义为 KIND=4)。我总是可以只使用real(kind=8) function some_function()
,但出于便携性的考虑,我不希望这样做。另外,在一个地方使用来自 iso_fortran_env 的 REAL64 感觉很脏,只是转身在另一个地方使用 KIND=8。
是否有一种简单(或至少可读)的方法来实现这一点,如下所示?
arrays - Fortran 2008 - 类中的数组变量
我有一个以下类,我需要在其中存储类型neuron_t
和connection_t
.
我试图像这样初始化数组
但我收到以下错误:
你知道吗,我做错了什么?mock_neuron_t
extends type neuron_t
,所以应该没问题。
编辑:
neuron_t
和类都是connection_t
抽象的,所以添加后我现在收到以下错误allocate(new_obj%neuron_arr)
:
class - Fortran 2008 - store class with allocatable properties using binary stream
I have a class
! class(connection_t), allocatable :: connection_arr(:) !< Array of all connections
It contains several arrays (allocatable variables), which are being allocated in constructors (module procedures).
I need to store the class or its properties, at least, into the binary file. I tried to do it by implementing save method:
But I'm getting following error:
I understand, that the allocatable variables are the cause of my problem, but I have no idea, how to properly solve this problem. Could, you, please, help me with storing this class? write(11) this 1 Error: Data transfer element at (1) cannot have ALLOCATABLE components unless it is processed by a defined input/output procedure
class - Fortran 2008 - 包含指针的类的用户定义 I/O
我有以下课程
我需要实现我自己的write
并读取functions
能够序列化的实例,net_t
因为它包含可分配的数组。
我试图实现这样的write
功能:
但是现在,出现了另一个问题 - 我收到以下错误:
我看到问题是,该类connection_t
包含指向神经元的指针,正如我们在这里看到的:
是否可以以这种方式序列化指针?我想使用神经元来防止neuron_t
实例本身的复制。
class - Fortran 类的异构数组
我有一个抽象类型和几个继承自他的类型。现在我需要为这些继承类型创建一个实例数组,但我不确定在 Fortran 中是否可行。
我尝试制作一些包装器类型,例如在 Fortran 中创建异构数组。
但我收到了这个错误:
我究竟做错了什么?或者还有其他正确的方法吗?
尝试 2
我根据 francescalus 的回答编辑了代码:
我收到另一个错误:
class - 如何覆盖用户定义的 I/O 过程?
我有一个抽象类,其中包含用于未格式化二进制流的读/写方法。我也有一些从抽象类继承的类,其中一些还有我还想序列化的附加组件。
因此,我希望第一组方法用作“默认”行为,并且在继承的类中覆盖它的方法仅由这些特定类使用。
我试图像这样实现它:
但我收到以下错误:
在我看来,就像类中的write
方法a
不能被覆盖一样。我怎样才能正确实施它?
class - Fortran - 如何为具有相同父级的不同类的数组编写用户定义的 I/O?
我需要实现一个函数,它将序列化(即保存到未格式化的二进制文件)一个包含对象数组的类,这些对象属于同一个抽象类,但属于几个不同的继承类。
关键是,这个数组被传递给我的函数,它是由用户的操作创建的。因此,我无法知道存储在数组中的特定类型。
有没有办法以某种方式实现写入和读取 I/O 方法,它可以自动写入数组而无需指定其单个元素的类型?
我写了这段代码来说明我的情况:
那么,有什么办法,如何序列化这样的数组而无需手动指定,即o1
类型b
和o2
类型c
?
我需要能够序列化一个抽象类型的数组,a
并且还可以在不了解其元素的情况下从二进制文件中读取它。