问题标签 [derived-types]
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.
c++ - 如何让一个类包含不同的类类型并调用持有的那些对象的成员?
在我的程序中,我发现了一种我想要的UserClass
情况
- 是一个可以容纳异构类型的容器
- 可以调用所持有对象的成员函数。
所持有的类型集是有限的,并且在编译时是已知的。事实上,所有类型只是不同的template
专业。
这段代码说明了这种情况:
没有一些恳求,我没有改变ArrayBase
或改变的灵活性TypedArray
。我没有storagePtr_t
定义类型,因为它应该是什么类型是我问题的关键部分。
我可以想到一种解决方案,如下图所示。但是多么痛苦啊!UserClass
这是我需要访问元素成员的 任何地方的大量代码。有没有更好的办法?
boost库是公平的游戏。
我的技术:
storagePtr_t
是ArrayBase*
,
arrayElmentTypeEnum_t
将是std::type_info*
mpi - 使用 MPI 派生数据类型
读完这篇文章后,我仍然想知道发送 C/C++ 结构数据的最佳方式。事实上,我已经决定使用派生类型,但我遇到了问题。
紧接着MPI_Init(...)
,我在一个单独的文件 (MPI_NewTypes.cpp/h) 中编写了一个函数,该文件基本上用于提交新的数据类型。这是一个快照:
在对不同文件中实现的函数进行了几次函数调用后,我使用了新的数据类型:MPI_MSGINSTALLP
. 但是,我的链接器抱怨它不知道这个新的派生类型是什么。从表面上看,这是一个 C/C++ scopinq 问题,但我没有做对。如何确保每当我使用新的派生数据类型时,MPI 都会知道它存在?每次在应用程序中使用这种新类型时,我都不想重做所有提交。
我试着把它放在 MPI_NewTypes.h 头文件中:
MPI_Datatype MPI_MSGINSTALLP
如果我将此标头包含在使用新数据类型的文件中,希望 mpic++ 会看到它。
没运气。
有什么帮助吗?
根据建议,这是启动 MPI 的顶级文件:
这里,Add_MPI_Types();
是提交新数据类型的函数,驻留在 MPI_NewTypes.cpp/h 文件中(已显示)。
该run(...)
函数也在另一个文件中定义,该文件实际上尝试执行 MPI-Send/Recv:
其中 msgInstallP 是 C/C++ 结构类型(它在 MPI 中的等价物是 MPI_MSGINSTALLP)。除了函数的接口声明外,MPI_MSGINSTALLP.h 不包含任何内容Add_MPI_Types()
。
如果需要更多详细信息,请告诉我。
arrays - 将派生类型作为数组传递
在 Fortran 中,可以对数组进行操作,但是如何将派生类型的索引也视为数组的一部分呢?代码将解释我最想做的事情:
我假设最后一行类似于与自身相乘的 2x4 矩阵。但是,当我尝试编译时,gfortran 抱怨
错误:不得指定具有非零等级的两个或多个零件参考
这可以在 Fortran 中做到吗?
c# - 在派生函数中返回派生类型
我有一个搜索表单,它执行返回对象列表的查询,这些对象列表是Contact类的子类。
在网格视图中使用列表时,仅存在于子类中的属性(例如HireDate)不会显示,因为列表包含基类(Contact)的对象。
有没有办法让子类中的GetContacts返回Employee列表而不是Contact列表?或者一种将Contact列表“投射”到Employee列表中的方法?
提前致谢 !
arrays - 派生类型数组:选择条目
目前在我的代码中我有一个二维数组
并定义一些常量
并分配类似的东西
所以我可以访问像
现在我不仅想要整数,而且想要每个元素的类型混合。所以我定义了一个派生类型
并使用元素数组
使用 2d 数组版本,我可以调用一个子程序来告诉它使用哪个条目。例如
所以我可以call find_average(HEIGHT)
找到平均高度或通过WIDTH
得到平均宽度。(而且我的子程序做的事情比找到平均高度或宽度更高级,这只是一个例子。)
问题:我怎样才能使用不同的类型(如派生类型),但也可以重用我的函数来处理不同的条目(如在示例子例程中)?
arrays - 将派生数据类型假定形状数组从子例程传递给fortran 90中的函数
我对 fortran 很陌生。而且我使用的是 fortran 内置的库,该库有许多 TYPE 数组。我尝试使用以下方法通过 ac 程序将值分配给 lib 中的 TYPE 数组。我已经构建了一个 c-fortran 接口,我从 sqlite 数据库获取值到 c prg 中的 ac 结构数组中。然后将此结构数组传递给一个 fortran 子例程,在其中我将其声明为派生类型,匹配声明的 TYPE 变量的定义在 lib 中。然后我将传递的数组中的值复制到 lib 中声明的实际 TYPE 数组,并将其传递给 fortran 函数。
发生的事情是数组中的值可以从 c 传递到 fortran 子例程,我打印它们以在 fortran 子例程中检查它们,但是当数组从子例程传递到函数时,这些值会变得乱码。我将数组作为假定的形状数组传递。该函数在模块内声明,因此我认为调用子例程不需要接口。
我不完全理解发生了什么,我也尝试使用 TYPE 声明中的序列。我正在使用 g95 , gcc 4.0.3 编译器。数组中的所有值都是 REAL(KIND =8) 类型,c 程序中的等价物是 double 。
考虑一个在其中声明了 TYPE(something), TYPE(Something2) 的库。我将 lib 作为模块导入到 fortran 子例程中。
让我们假设
在库中
///////////////////////////////////////// //////////////////////////////////
///////////////////////////////////////// ////////////////////////////////////fortan 子程序
因此,它们在函数中传递后会出现乱码,但在子例程中是可以的。我的问题是为什么会这样?我该如何解决?
casting - 使用可分配组件强制转换派生类型数据
我试图找到一种方法将具有可分配组件的派生类型对象传递给 Fortran 过程,而过程不知道类型定义。要了解我为什么要这样做,有关背景的一些信息可能会有用。
考虑一个包含稀疏矩阵向量乘法的通用过程,如 Lanczos 对角化例程。该过程本身不使用矩阵,仅使用向量。该过程唯一需要对矩阵做的就是将它与向量一起传递给矩阵向量乘法例程。稀疏矩阵必须是具有可分配组件的派生类型变量。
在我看来,程序不需要知道稀疏矩阵的数据类型。它只需要将它传递给矩阵向量乘法例程,然后它将对其进行适当的解码。我试图做的是使用TRANSFER
内部函数将派生类型变量转换为可分配的字节数组,然后将其传输回初始派生类型变量。不幸的是,这不适用于具有可分配组件的派生类型变量,请参阅以下两个链接:链接 1、
链接 2
因此,如上所述,我的问题如下:是否有一种合理的方法*将具有可分配组件的派生类型对象传递给 Fortran 过程,而过程不知道类型定义?
*注意:我知道我可以使用自定义的内部格式化写入将派生类型变量存储到固有类型数组中,例如字符数组。这在我看来非常奇怪,但也许我错了?
编辑 :: 正如 Vladimir F 在下面所说,调用TRANSFER
具有可分配组件的派生类型时的行为是非标准的。然而,令人惊讶的是,我发现这适用于最新版本的 PGI 编译器。这是一个测试程序:
以下是不同编译器的结果:
haskell - 为什么在 Haskell 中显式推导 Show/Read?
我们不能为每种类型都做read someValue :: someDataType
or ,因为必须写在声明中。除了错误之外,是否存在我们不希望我们的类型可序列化的情况?为什么 Show 与 Read 分开?有没有一种情况,除了错误,我们只想显示一些数据而不读取它?如果没有,为什么没有单一的数据类型?show someValue
deriving (Show, Read)
data
Serializable
刚才,我正在使用Gloss 库的Key
数据类型,它派生Show
而不是Read
,我不明白。很遗憾,因为我想把控件的配置放在一个文件中然后读取它,这样玩家就可以更改控件并拥有自己的配置。我必须为 Key、SpecialKey 和 MouseButton 做包装,这没什么大不了的,但没用。
haskell - 构造函数中的不可见/隐藏字段
我正在学习 Learn You a Haskell for Great Good,我已经达到了第 8.4 节,“派生实例”。在本节中,有以下数据类型声明:
在尝试的同时
我收到以下错误:
通过更正我删除了错误lastname
。lastName
问题:
在错误消息中,该词(visible)
向我暗示必须有可能将字段声明为 hidden / invisible。这是正确的还是不正确的?如果是,我如何将构造函数中的字段声明为隐藏,以及需要声明隐藏字段的一般场景是什么?如果您可以通过给出一个简单的使用示例来解释这一点,那将不胜感激。
注意:我在 LYAH 中找不到任何关于隐藏或不可见字段的参考/详细信息。