问题标签 [contravariance]
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++ - 如何在 C++ 中实现模板类协方差?
是否有可能以这样一种方式实现一个类模板,如果它们的模板参数相关,一个对象可以转换为另一个对象?这是一个展示这个想法的例子(当然它不会编译):
这里的另一个问题是 Foo 是一个抽象类,用作包含返回 T& 和 T* 的函数的接口,因此我无法实现模板复制构造函数。
我正在编写一个通用的 Iterator 类,它可以容纳任何 STL 迭代器,除了类型擦除之外,我还希望它是多态的,即我可以写这样的东西:
UPD:那是我的错误,我实际上不需要将 Foo* 转换为 Foo* 来实现 MyIterator,所以我认为这个问题不再实际。
c# - 演员表- 协方差/逆变问题
给定以下类型:
我想知道如何将 a 转换List<MyClass>
为 a List<IMyClass>
?我对协变/逆变主题并不完全清楚,但我知道我不能因此而简单地投射列表。
我只能想出这个微不足道的解决方案;缺乏任何优雅,浪费资源:
您如何以更优雅/高性能的方式解决它?
(请注意,我需要 .NET 2.0 解决方案,但为了完整起见,我也很乐意看到使用更新框架版本的更优雅的解决方案。)
c# - T 必须是逆变有效的
这有什么问题?
它说:
无效方差:类型参数“T”必须在“MyNamespace.IRepository.Delete(T)”上逆变有效。“T”是协变的。
c# - 实现 Co 和 Contra 方差通用接口及其实际用途
我试图了解使用变体通用接口的可能用途(同时使用 co 和 contra 变体)。有人可以解释一下吗?我分别理解了接口的 co 和 contra 方差示例,
协方差示例
反方差示例
Co/Contra方差
谢谢
scala - 逆变和val
“val”和“case”如何以及为什么会影响类型系统?(尤其是方差)
.net - 有机会合法投吗?
这是我第一次在这里发布问题,所以提前感谢任何人会帮助我(也许还有其他人)。
今天我一直对 C# 4 中的协变和逆变感到困惑,但我真的看不出有任何可能做我想做的事。注意:所有这些都不是为了解决特定问题,但我想知道是否有任何合法的方法(C# 4 中全新的 co/contra-variance)来解决它。所以,不要发疯...
这里是示例代码:
该集合应该能够托管任何 IBase 衍生品,它们是任何 T 的。当然,我可以使用非泛型集合或列表,游戏就结束了。另一个想法是有一个更通用的接口 IBaseCore,然后 IBase 继承自。我的问题是:如果没有这些技巧,我可以收集 IBase 并添加任何 IBase 的项目吗?
谢谢大家。
scala - 错误:协变类型 A 出现在逆变位置
我试图写一个不可变的Matrix[A]
类。我希望类是协变的,A
但是当我放在编译器+
前面时,A
开始抱怨类中的一些操作。
以下是我Matrix
班级的一个相关子集(实际班级比以下子集大 5 倍):
对于类中的最后四个操作,编译器显示错误“协变类型 A 出现在逆变位置”。我无法理解这些错误的原因,以及如何摆脱它。请解释这些错误背后的原因并提出解决方法。谢谢。
scala - 在设计业务应用程序时如何使用协变和逆变?
我知道在标准库中使用co-
和contravariance
(例如集合和特征Function
)我想知道如何co-
以及contravariance
在“现实世界”业务应用程序的设计中使用。
scala - 如何确定类型参数的方差?
受到Scala中协变和逆变的真实示例的启发,我认为一个更好的问题是:
在设计库时,在确定类型参数应该是协变还是逆变时,是否应该问自己一组特定的问题?还是应该让所有内容保持不变,然后根据需要进行更改?