问题标签 [heterogeneous]
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++ - 具有值语义的临时多态性和异构容器
我有许多不相关的类型,它们都通过重载的自由函数(即席多态性)支持相同的操作:
正如问题的标题所暗示的那样,我想将这些类型的实例存储在异构容器中,以便use()
无论它们是什么具体类型,我都可以使用它们。容器必须具有值语义(即两个容器之间的分配复制数据,它不共享它)。
当然,这必须是完全可扩展的。想想一个库 API,它需要一个vector<???>
, 和客户端代码,它将自己的类型添加到已知的类型中。
通常的解决方案是存储(智能)指向(抽象)接口(例如)的指针,vector<unique_ptr<IUsable>>
但这有很多缺点——从我的脑海中:
- 我必须将我当前的 ad hoc 多态模型迁移到一个类层次结构,其中每个类都继承自公共接口。哦,快!现在我必须为和什么不写包装器
int
......string
更不用说由于自由成员函数与接口(虚拟成员函数)密切相关而导致的可重用性/可组合性降低。 - 容器失去了它的价值语义:
vec1 = vec2
如果我们使用简单的赋值是不可能的unique_ptr
(迫使我手动执行深拷贝),或者如果我们使用两个容器最终都处于共享状态shared_ptr
(这有其优点和缺点 - 但因为我想要价值容器上的语义,我再次被迫手动执行深拷贝)。 - 为了能够执行深拷贝,接口必须支持必须在每个派生类
clone()
中实现的虚函数。你能认真地想出比这更无聊的事情吗?
总结一下:这增加了很多不必要的耦合,并且需要大量(可以说是无用的)样板代码。这绝对不能令人满意,但到目前为止,这是我所知道的唯一实用的解决方案。
多年来,我一直在寻找一种可行的替代子类型多态性(又名接口继承)的方法。我经常使用 ad hoc 多态性(又名重载的自由函数),但我总是遇到同样的难题:容器必须是同质的,所以我总是不情愿地回到继承和智能指针,上面已经列出了所有缺点(可能还有更多)。
理想情况下,我希望只vector<IUsable>
具有适当的值语义,而不更改我当前(不存在)类型层次结构的任何内容,并保持临时多态性而不是需要子类型多态性。
这可能吗?如果是这样,怎么做?
mysql - 使用 mysql_fdw 将表从 Postgres 连接到 MySQL 或
我在 Postgres 中有一张表,需要在 MySQL 中反映。我发现了这个http://wiki.postgresql.org/wiki/Foreign_data_wrapper#mysql_fdw虽然方向非常不清楚如何实际链接到 MySQL。CREATE FOREIGN TABLE 在 Postgres 中有效,但在 MySQL 中是一个语法错误。在运行所有的 CREATE FOREIGN TABLE 并在 Postgres 中创建 CREATE SERVER mysql_svr 之后,没有数据神奇地出现在 MySQL 中,所以我一定错过了一个步骤,他们没有提供。
mysql - 将 postgres 表与 mysql 表链接在测试中失败
我正在尝试将 Postgres 表中的数据反映/镜像到 MySQL 表。我找到了 mysql_fwd,在将所有内容连接到本地主机后,我无法将数据输入到 postgres FOREIGN TABLE。输入 MySQL 的数据也不会显示在 postgres 中(向后测试)?来自 MySQL 的数据不会反映在 postgres 中,如果我测试其他方式(正确方向) post_sync=# INSERT INTO mysql_sync (user_name, user_id) VALUES ('Joe', 3); 错误:无法更改外部表“mysql_sync”
** * ** * ** * **构建过程* ** * ** * ** * ** * *
** * ** * ** * ** * ** * **结构* ** * ** * ** * **
** * ** * ** * ** * ** * ** * ** mySQL结构 ** * ** * ** * ** * *
list - Scala 中的异构列表;使用地图功能
所以问题在于无形库的理解 HLists https://github.com/milessabin/shapeless;我HLists
用来存储一些功能,即:
而且效果很好:我可以从列表中获取任何功能并应用它:
list.head(object)
但是,我在使用map
函数(list map mapFunc
)应用它时遇到问题:
它说Application doesnt take parameters
。那么我该如何处理呢?Mb 我不明白吗?我是 Scala 的新手。
ps 构造函数有一个有趣的效果,这段代码正在构建 lil 有点不正确:
function1(_) :: function2(_) :: HNil
它被识别为某种类型的函数,但HList(function1(_), function2(_))
具有正确的类型。
编辑
'ps' 已决定——function1(_) :: function2(_) :: HNil
确实有类型不匹配;但function1 _ :: function2 _ :: HNil
没关系!
list - 动态增长的异构列表,Scala
有没有办法坚持(我的意思是保持在一个变量中)(有可能吗?)动态增长HList
?我的伪代码:
显然,这段代码不起作用。list.head
所以 ofc 它可以工作,但由于输入不正确,我们甚至不能这样做HList
(据我所知,list
甚至根本不保留类型参数)。
结果类型:
所以,这是不正确的。
编辑
上面的信息还不够,我明白了。
所以我想有一些对象,就像一个变量,它可以是任何HList
类型的;
为了有时HList
在这个变量中传递;
ps @milessabin mb 是的,最好为我的问题找到另一个解决方案。
scala - 可变异构列表,Scala
是否可以将元素添加到一些应该是异构列表的可变对象?
所以我的意思是,我正在处理 Dijkstra 的算法,我需要以这种方式将一些函数保留在图形的弧中:
其中start
- 是起始节点;end
- 结束节点;f
- 是节点之间的一些函数,Arc 是保持这个函数的对象,这对我来说是最重要的。
这一切都很完美,但我将所有弧线保存在节点内的列表中:
你看,问题是我们在简单列表中丢失了类型;在向我们的节点添加新弧时,我们将完全丢失有关类型的所有信息。
解决问题的可能方法是使用HLists
; 一些工作代码的示例(为解释添加更多信息):
顺便说一句,现在一切都是这样的:
所以问题是我怎样才能像下面的代码一样制作smth(它是不正确的——类型错误),并将元素添加到这个HList:
因为我什至不知道如何传递这种类型的不匹配,而且我看不到任何方法可以将所有转换保留为节点的字段并保留所有类型。
编辑
嗯,我可以将转换传递给构造函数,而根本不使用可变对象。
list - Scala 函数中的异构参数
我怎样才能通过一些HList
作为论点?所以我可以这样制作:
但是,如果我有一个很长的列表,而我对此一无所知,我该如何对其进行一些操作呢?我怎样才能传递参数而不丢失它的类型?
java - java中的异构容器,包括原始类型
我使用了 Joshua Bloch 的异构容器理念来安全地键入存储/检索值。但我也在存储原始类型(在容器中自动装箱为对象类型),并且无法将值作为原始类型检索。type.cast(value) 似乎将值自动装箱回对象(我已经转换为双精度对象),此时它无法将类型转换回原语。
这是我的代码:
谢谢,我很感激你的帮助。
c# - c#中的ArrayList可以存储异构数据吗
是否可以将整数、字符串和用户定义的类对象存储在一个数组列表中,例如
如果一切皆有可能,那么如何访问存储的元素(如何将它们抛出)?如果没有,那么有没有办法实现这一点?
scala - Scala中的异构映射,有可能吗?
所以问题出在标题上。这里有一些解释:众所周知,我们可以使用HList
它来存储对象及其类型。
哪里SomeCL
有课。所以我想制作地图,它可以在里面存储所有类型的信息,比如:
并且不要丢失有关类型的信息。我想注意,对象类型和对象数量 r 未知,因此我们不能对原生 shapeless 使用大量隐含HMap
。可能吗?
已编辑
(我的意思是我们不可能为 shapeless 手动编写所有隐式类型转换HMap
)
附言
如果不可能,我该如何决定这样的问题:例如,我有一些对象HList
,我正在构建图形。每个节点的安全类型非常重要(我们从 中的对象创建节点HList
),我不知道对象的数量。我如何构建图形,而不是丢失有关类型的信息?
已编辑2
S
顺便说一句,如果是 and 的超类型A
,此代码将引发错误C
;我们怎样才能避免这种情况?