小编Ved*_*ong的帖子

Fortran 03/08(gfortran 编译器)中使用无限多态类型进行数组操作

我想通过class(*)功能(无限多态性)实现有用的数组操作(添加元素、删除元素、可分配/指针/二叉树结构的不同实现)。我使用 gfortran 5.0 应该可以处理这样的功能。我需要它,以免为我使用的每种类型重复相同的代码。

这应该看起来像

function add_element(array,element)
  class(*),intent(in)::array(:)
  class(*),intent(in)::element
  class(*)::add_element(size(array)+1)
       add_element=[array,element]
end function
Run Code Online (Sandbox Code Playgroud)

问题是,当我尝试将此函数与某些确定类型一起使用时,返回结果时出现错误。如果没有,我无法分配class(*)给某些明确的类型变量select type,并且我当然不希望每次使用它时都选择类型结构。在子例程中,我不应该知道我想要使用的任何类型,因为我将创建其中的许多类型。

我尝试了一些变体move_alloc,源,尝试使用带参数的子例程intent(out)等。它不起作用。我认为它应该在参数属性中定义,与大小相同(带有源关键字?),但在标准中没有找到此类结构的示例或定义。当然,我会更多地研究这个标准(我不是专业程序员,而是物理学家,试图使我的程序可测试、可检查并且更容易更改),并且现在将简单地重复此代码以等待更好的解决方案,但也许有人知道在哪里在标准或某本书中搜索它?我认为这不仅与数组有关,而且与数组的使用有关class(*),因为我认为应该有一些不知道类型的方法......

不知道我是否应该添加该子例程的其他无效形式的示例或它对错误的说明 - 否则问题将失去焦点。它可以被编译,但在所有情况下,在调用中分配给明确的类型都不起作用。对于论证intent(out)来说,(inout)它不能从虚拟论证变成实际论证。从源重新分配会生成一个具有类型的对象(以及在我的示例中分配的结果),但该类型是隐藏的......并且我无法在子例程中使用选择类型,因为我不知道该类型。

另外,我不知道可以检查“相同类型”或在这种情况下的某些内容的构造......

arrays fortran class gfortran

5
推荐指数
1
解决办法
2369
查看次数

标签 统计

arrays ×1

class ×1

fortran ×1

gfortran ×1