是否可以在 Fortran 2003 的类型中实现“抽象”变量?

2023-11-30

我想写一个抽象类型

type, abstract :: Vehicle
    real, dimension(:), allocatable:: Wheels 
    contains
     procedure (Compute_Weight), deferred :: VehicleWeight
end type Vehicle

也就是说,我想在数组的抽象类型中有一个占位符,这样它就可以在扩展类型中被覆盖或重新定义,例如

type, extends(Vehicle) :: Bike
     allocate(Wheels(2))
    contains
     procedure :: VehicleWeight => BikeWeight
end type Bike

    type, extends(Vehicle) :: Car
     allocate(Wheels(4))
    contains
     procedure :: VehicleWeight => CarWeight
end type Car

GCC 编译器会抱怨(我猜是对的),我能找到的解决这个问题的唯一解决方案就是不在抽象类型中声明可分配函数,并直接在类型内使用正确的大小声明变量。 尽管如此,我还是希望有一种占位符来强制实施 Wheels(原型)所描述的基本属性。我


组件的分配是一个可执行操作 - 它需要出现在源代码的可执行部分中。考虑这样的事情:

type, abstract :: vehicle
  real, dimension(:), allocatable :: wheels
  ...
end type

type, extends(vehicle) :: bike
  ...
end type bike

type, extends(vehicle) :: car
  ...
end type car

interface bike
  procedure bike_constructor
end interface bike

interface car
  procedure car_constructor
end interface car

...

function bike_constructor()
  type(bike) :: bike_constructor
  allocate(bike_constructor%wheels(2))
  ...
end function bike_constructor

function car_constructor()
  type(car) :: car_constructor
  allocate(car_constructor%wheels(4))
  ...
end function car_constructor

在 Fortran 2008 中,可以通过以下简单的方式使用它:

class(vehicle), allocatable :: obj
IF (i_feel_like_some_exercise) THEN
  obj = bike()
ELSE
  obj = car()
END IF
PRINT "('My object has ',I0,' wheels!')", SIZE(obj%wheels)

在 Fortran 2003 中,不支持对多态对象的内部赋值。需要使用解决方法,例如在 ALLOCATE 语句中使用 SOURCE 说明符。

对组件和过程适当应用公共和私有可以进一步指导和约束客户端代码以正确的方式与类型进行交互。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以在 Fortran 2003 的类型中实现“抽象”变量? 的相关文章

  • javascript 之谜:两个对象在构造函数、原型和 __proto__ 链接方面看起来相同,但行为不同

    我是一位经验丰富的面向对象程序员 但这让我着迷 为什么我可以执行 new f 而不能执行 new a 我将不胜感激任何指点 first a few facts if Object instanceof Function console lo
  • 时间数组在建模中超出范围?

    这些天我正在尝试使用新的气象数据 以 netcdf 格式而不是旧的 cray 格式给出 运行我的气候模型 模型编译顺利 但是当进行模拟时 模型在第一天运行良好 但在模拟的第二天就停止了 总是在同一时间步长 无论我使用哪个开始日期 错误是 f
  • 通过 SignalR 在 IE 中缺少原型方法

    我遇到了一个问题 即仅在 IE 中并且仅当数组通过 SignalR 时才处理原型方法消失 在本例中为 Array prototype 方法 我写了一个小 愚蠢但简单的概念验证网络应用程序来演示这个问题 代码全部在下面 请注意 当您单击 更新
  • 可变格式

    我编写了一个程序来计算平方有限差分矩阵 您可以在其中输入行数 等于列数 gt 这存储在变量矩阵中 该程序运行良好 program fin diff matrix implicit none integer dimension allocat
  • 如何用好Fortran语句标签?

    我正在开发一个用 Fortran 95 编写的模型 我对此完全陌生 语句标签的概念似乎很奇怪 到目前为止我只找到了标签可以由作者任意决定的解释 通常以 10 为增量 除了更容易地找出语句的结尾位置之外 这些标签还有其他实际用途吗 以及关于如
  • Javascript无限原型链

    我正在使用以下测试代码 function Test Test prototype MyMethod a function b function 为了运行它 我只需这样做 var test new Test console debug tes
  • Fortran PURE 函数可以使用全局参数吗?

    在我看来 Fortran 中所谓的纯函数对于那些使用函数式编程的人来说似乎不够纯粹 这是我的问题 假设我有以下代码 MODULE basics IMPLICIT NONE INTEGER PARAMETER dp kind 1 0d0 RE
  • 如何在编译时检查该类是否是抽象的?

    我所说的抽象类是指至少具有一个纯虚方法的类 如果检查显示该类是 我希望编译失败not抽象的 有可能吗 Use std is abstract http en cppreference com w cpp types is abstract
  • 如何调用模块中子程序内部的函数?

    我有一个包含子例程的模块 该子例程又包含一个函数 我说use themodule在我的主程序中 我可以call thesubroutine 但是如何访问子例程中包含的函数呢 代码如下所示 module useful integer para
  • 纯 Fortran 过程中的 I/O

    我正在尝试将错误检查合并到我正在编写的纯过程中 我想要这样的东西 pure real function func1 output unit a implicit none integer a output unit if a lt 0 th
  • 最佳 Fortran IDE [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 stackoverflow上有人用Fortran吗 您使用什么 IDE 您认为哪一个是最好的 似乎我周围的很多人都对 Intel Visu
  • 将数组从 .npy 文件读入 Fortran 90

    我使用 Python 以二维数组 例如 X 的形式生成一些初始数据 然后使用 Fortran 对它们进行一些计算 最初 当数组大小约为 10 000 x 10 000 时 np savetxt 在速度方面表现良好 但是一旦我开始增加数组的维
  • 在一条语句中对多个变量进行相同的赋值

    有没有一种方法可以为不同的变量分配相同的值 而无需在单个语句中构造数组 例如 如果我有变量a b c d and e 我可以分配类似的东西吗 a b c d e 10 0 我知道我可以用一行来做 a 10 0 b 10 0 c 10 0 d
  • R:使用带有 .Call 和 C/C++ 包装器的 Fortran 子例程而不是 .Fortran 的优点?

    我有一个 R 包 它使用大量 Fortran 子例程来进行递归线性代数计算的嵌套循环 很大程度上依赖于 BLAS 和 LAPACK 例程 作为 Fortran 的接口 我使用 Fortran功能 我刚刚读过乔纳森卡拉汉的博客文章 http
  • 类函数/变量在使用之前是否必须声明?

    所以我在学习课程时偶然发现了一些对我来说相当尴尬的事情 class Nebla public int test printout return x void printout printout2 private int x y void p
  • Python 2.6、3个抽象基类的误解

    当我使用 ABCMeta 和 Abstractmethod 时 我没有看到我所期望的结果 这在 python3 中工作得很好 from abc import ABCMeta abstractmethod class Super metacl
  • Backbone Collection 和 Marionette CompositeView 中未定义的模型原型

    尝试从值列表填充集合时 我收到有关集合的错误model s prototype未定义 看着这个问题是关于类似问题的 https stackoverflow com q 16126195 1663942 我已经检查过模型确实已创建before
  • 抽象类和接口之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 接口与基类 https stackoverflow com questions 56867 interface vs base class 我不明白抽象类和接口之间的区别 我什么时候需要使用哪种字体
  • OOP Javascript - 是否需要“获取属性”方法?

    给定一个非常简单的 js 对象构造函数及其原型 function MyTest name this name name MyTest prototype getName function var myName this name retur
  • 为什么需要原型对象(在函数中)?

    我阅读了大量有关原型的材料并了解继承的一般情况 然而 这是困扰我的一件事 我无法弄清楚 On dmitrysoshnikov com http dmitrysoshnikov com ecmascript javascript the co

随机推荐

  • 如何在nodejs中使用typescript/flow而不编译它

    有人可以给我一些建议或链接来讨论我是否应该为后端捆绑 JS 我尝试用这个标题 和类似的词 搜索谷歌 但找不到任何有用的链接 只是想知道 假设我正在使用最新的 Node JS es6 ready 我应该捆绑 编译 JS 吗 如果没有 我该如何
  • 循环 Observable 数据,推送到数组,并显示数组打字稿的所有结果

    我如何循环遍历我作为 Observable 订阅的数据 将其推送到数组 并显示数组的全部数据 我目前的代码仅显示每个 页面 的数据 而不是所有页面 我之所以要这样做 是因为我想制作无限滚动 谢谢你 成分 this storiesServic
  • 来自资源字符串的 Toast.makeText

    我有一个名为 MyPrimaryClass 的类 该类有一个按钮 按下时会创建一个类为 myClassForResult 的 Intent 我用它来启动它 startActivityForResult myIntentOfMyClassFo
  • Python:如果 DataFrame 之间的其他值匹配,则对 DataFrame 中的值求和

    我有两个不同长度的数据帧 如下所示 数据框A FirstName LastName Adam Smith John Johnson 数据框B First Last Value Adam Smith 1 2 Adam Smith 1 5 Ad
  • 从实体框架实体获取列数据类型

    使用实体框架 5 首先使用数据库 是否可以 在运行时 获取实体属性所代表的数据库列的数据类型 如果更容易的话 net 类型也可以正常工作 IEnumerable
  • android渲染使用CPU而不是GPU?

    很奇怪的是 在 systrace 工具中 当我看到 SurfaceFlinger 执行绘图命令和窗口合成时 它是在 CPU 上运行的 而不是在 GPU 上运行的 但根据 Romain Guy 的 google 演讲 他们表示绘图命令的组合和
  • PHP 致命错误:使用 laravel4 找不到类“PDO”

    一小时后尝试解决这个问题我失败了 我的错误消息是 Generating autoload files PHP Fatal error Class PDO not found in usr share nginx html laravel a
  • C 函数局部变量的作用域

    当我开始用 C 语言编程时 我就听说过以下场景 尝试从外部访问函数局部变量将导致错误 或垃圾值 由于当我们从函数返回时堆栈被清除 但我的下面的代码示例打印的值为 50 我正在使用最新的 GCC 编译器编译代码 include
  • 如何根据下面的示例从 SQL Server 检索数据?

    实际上我在这里发布了与此相关的类似问题如何按照下面的要求从 SQL Server 检索数据 现在我需要对此进行一些更改 因此请在提出建议之前查看此内容 我有一张这样的桌子 CustName Country RecordedTime Alex
  • 使用 Scala 符号文字会导致 NoSuchMethod

    我最近开始使用 Scala 我在其中编写了一个 DSL 可用于描述中的处理管道medici 在我的 DSL 中 我使用符号来表示锚点 它可用于在管道中放置叉子 或 T 恤 如果您愿意 这是一个正确运行的小示例程序 object Test e
  • Rails 4 表单:基于单选按钮选择条件显示字段

    首先 如果这个问题很愚蠢 请原谅我 我刚刚开始了解 Rails Javascript 和 jQuery 对我来说是一个全新的世界 我发现了以下类似的问题 但根本不明白它们如何适用于我的情况 如果选中复选框则显示 隐藏 div 根据所选的单选
  • 合并 d3 中的转换

    如何在不中断第一个转换的情况下将第二个转换添加到 D3 中正在进行的转换 我创建了一个jsbin来说明问题 在示例中 一个按钮触发一个转换以增加矩形的宽度 另一个按钮触发一个转换以将其填充变为红色 function changeFill d
  • getenv() 如何是线程安全的?

    我想使用getenv 功能 现在我收到某人的评论 如果多个线程调用这个函数 这将不是线程安全的 但是如果我看看信息页对于这个函数 它指出 只要环境保持不变 并发调用该函数是安全的 我理解静态数据块的概念 并且该函数返回指向它的指针 据我了解
  • 在sqlite3中用REGEXP替换字符串的一部分

    我安装了 REGEX 支持 apt get install sqlite3 sqlite3 pcre 现在我可以在 bash 控制台上的查询中使用 REGEX 例如 DB somedb db REGEX EXTENSION SELECT l
  • 为什么这段文本没有出现在 JSF 中?

    我有以下 HTML 文件 Hello
  • Inno Setup Windows DLL 函数调用,带有指向结构的指针

    我正在尝试使用 Inno Setup 的 Pascal 脚本语言来设置服务的失败操作 我收到经典 地址访问冲突 错误 似乎这是不可能的 因为该语言不支持指针 有任何想法吗 这是代码片段 type TScAction record aType
  • 执行存储为字符串的 JavaScript 代码

    如何执行一些字符串形式的 JavaScript function ExecuteJavascriptString var s alert hello how do I get a browser to alert hello 随着eval函
  • Android Instant App 未正确安装(行为与普通应用程序相同)

    我正在尝试使用以下步骤向移动设备启动即时应用程序 在 Android Studio 中生成 Instant App 的签名 apk 这将生成一个包含 Base apk 文件和 feature apk 文件的 zip 文件 解压生成的文件 使
  • 如何在使用 symfony2(和 fosUserBundle)登录时动态添加用户角色?

    在我的应用程序中 用户可以随着时间的推移在免费用户和高级用户之间切换 当他们的订阅到期时 他们不再拥有高级权限 我想我可以走捷径 不将高级用户角色存储在数据库中 只存储他们付款的日期 从而消除了添加或删除用户的高级角色的 cron 作业的需
  • 是否可以在 Fortran 2003 的类型中实现“抽象”变量?

    我想写一个抽象类型 type abstract Vehicle real dimension allocatable Wheels contains procedure Compute Weight deferred VehicleWeig