19得票2回答
协变返回类型、const常量性和不完整类

这段代码可以在g++ 6.1下成功编译,但在clang 3.8下会出现错误:class C; class Base { public: virtual const C *getC(); }; class Derived : public Base { public: virtual...

43得票5回答
反变(Contravariance)解释

首先,我已经阅读了许多关于协变和逆变的解释,感谢Eric Lippert制作了如此出色的协变和逆变系列文章。然而,我有一个更具体的问题需要理解。据Eric的解释,协变和逆变都是描述转换的形容词。协变转换是保留类型顺序的转换,而逆变转换则是颠倒它。我理解协变的方式是,我认为大多数开发人员都可以直...

7得票3回答
委托中的协变性,有任何例子吗?

我正在阅读this msdn article,其中逆变示例(键盘和鼠标事件)非常好而且有用,而协变示例(哺乳动物和狗)看起来不是那么好。 键盘和鼠标事件很棒,因为您可以使用一个处理程序处理多个情况;但我想不出将返回更具体类型的处理程序分配给返回基本类型的处理程序的优点,更不用说拥有关心返回类...

7得票2回答
Scala中关于协方差的一些问题

我正在尝试理解Scala中的协变性,但是我找不到任何能帮助我解决这个问题的示例。我有这段代码: class GenericCellImm[+T] (val x: T) {} 代码编译成功,但在使用时出现问题。 class GenericCellMut[+T] (var ...

7得票1回答
Scala RDD的协变性问题的解决方法

我将尝试编写一个函数来操作RDD[Seq[String]]对象,例如: def foo(rdd: RDD[Seq[String]]) = { println("hi") } 此函数无法在 RDD[Array[String]] 类型的对象上调用: val testRdd : RDD[Ar...

13得票3回答
C++:如何避免在继承类中出现“无效的协变返回类型”而无需进行强制转换?

我有一个相当复杂的类层次结构,在其中类相互交叉依赖:有两个抽象类A和C,分别包含返回C和A实例的方法。在它们的继承类中,我想使用协变类型,但在这种情况下,这是一个问题,因为我不知道如何提前声明继承关系。 我得到了一个“test.cpp:22: error: invalid covariant...

10得票3回答
Java中如何实现通用函数?

根据我的理解,以下是Java中的通用函数: public static <T> T f(T x) { Integer[] arr = new Integer[4]; T ret = (T) arr[2]; return ret; } 编译成以下形式(因为它是...

98得票9回答
C#支持返回类型协变吗?

我正在使用.NET框架,我真的想能够制作一个自定义类型的页面,让我的整个网站都使用它。但当我尝试从控件中访问该页面时出现问题。我希望能够返回我的特定类型的页面而不是默认页面。有没有办法做到这一点?public class MyPage : Page { // My own logic ...

10得票4回答
具有多个协变接口的通用类型推断,如何解决?

考虑这个什么也不做的愚蠢程序:interface I<out T> { } class A1 : I<A1> { } class A2 : A1, I<A2> { } class B1 { } class B2 : B1, I<B2> { } c...

123得票9回答
什么是协变返回类型?

在Java中,协变返回类型是什么?在面向对象编程中呢?