问题标签 [covariant]
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.
php - 将对象转换为其子类之一(协变返回类型)的正确 OO 方法是什么?
我有一个子类需要返回其父类的返回类型的子类。我相信这被称为协变返回类型。我想知道从父类转换为子类的最简单方法。
arrays - Ada 中的数组是协变的吗?
我知道在 Java 中数组是协变的。例如:
我的问题是 Ada Covariant 中的数组吗?
c++ - C++ 覆盖成员变量 (std::vector)
这是我的问题所涉及的课程
首先,我想谈谈我解决的问题。他们可能会帮助他人。如果我是对的,你可以确认我^^
我可以覆盖具有不同返回类型的函数吗?
Node* getNode(int index) 变成 TransformationNode* getNode(int index)是的,只要返回类型是协变的:http ://www.tolchz.net/?p=33
我可以覆盖成员吗?
我不知道覆盖,但派生类中具有相同名称的变量将隐藏基类中的变量
还有一个问题,我真的很想解决一些问题
在 TransformationNode 类中,我做了很多(恕我直言)从基类到派生类的可避免类型转换。我绝对知道 mNodeList 向量中的所有元素都是 TransformationNodes 但要处理 mNodeList 我必须对它们进行类型转换。
继承是正确的,我的意思是 TransformationNode 是一个节点
mNodeList 包含节点的子节点,并且它不能在包含节点的类型转换版本的派生类中具有副本
最后,如果 static_cast 成本更高,我什至可以使用 reinterpered_cast。你能告诉我这些手术的费用吗?它们真的是很大的性能问题吗?
assert (dynamic_cast)... 已经采取了某种预防措施。
简要地说,我希望我的编译器知道 mGraph 实际上是一个 SceneGraph* 并且 mNodeList 包含 TransformationNode* 这有助于我避免丢失类型转换。
感谢您抽出宝贵时间
c# - 传递可变数量的泛型类型参数
具体来说,我想编写一个可以像这样使用的导出函数:
我想到了类似下面的代码,但在这种情况下,我必须将所有内容都转换为“对象列表”,这不是我想要的。
你能给我一个提示如何优雅地解决这个问题吗?
c++ - 具有非指针/引用返回类型的协变返回类型
我正在尝试在 C++(11) 中实现一个.NET 框架,如集合类。我的问题是无效的协变类型。我有这些课程:
在我看来,这太棒了。但是在 C++ 中实现它看起来是不可能的。我得到 g++ 的“无效协变返回类型”,据我所知,问题是 GetEnumerator 可能只返回一个指针或对 Enumerator 的引用,而不是 Enumerator 本身的对象。
我想避免返回这样的指针:
因为我不希望调用者打扰删除。使用临时对象,我可以确保该对象被自动删除,因为它不再需要了。使用引用可能会更糟。
我错过了什么吗?还是 C++ 标准(和语言)存在巨大漏洞?我真的很想实现这样的目标。
提前致谢。
java - Java 枚举中的协变返回类型
正如本网站上的另一个问题所述,这样的事情是不合法的:
这是由于协变返回类型显然不适用于枚举常量(再次打破枚举常量是枚举类型的单例子类的错觉......)那么,我们添加一些泛型怎么样:这合法吗?
在这里,所有三个返回Class
对象,但单个常量比整个枚举类型“更具体”......
c++ - 具有多重继承的纯虚函数重载和协变返回类型
我必须修改我之前的问题。使用多重继承创建协变返回类型是否有任何限制?
下面的代码提出了问题。如果我们取消注释从 IDFPin 继承的类 IDFOutputPin,当我们尝试通过 IDFSourceNode 接口从 Source 类型的对象获取 IDFOutputPin 时,整个代码都会中断。质疑为什么会这样?我刚刚开始使用模板和这样的mixin,所以也许有一些限制,或者可能是编译器错误 - VS2010?
c++ - 虚函数返回类型
我在一个基类中定义了一个纯虚函数 virtual int GetData() const = 0
;
在每个派生类中,我定义了一个枚举并尝试覆盖 GetData 函数返回(派生类特定枚举)值;
例如:
说我不能为所有类的所有枚举值定义相同的范围是非常重要的。上面的代码会产生编译错误:
任何建议 - 如何解决?
scala - Liskov 替换原则和数组不变性
Liskov 替换原则告诉我们,如果 A 是 B 的子类型,那么我们可以用类型 B 做的所有事情都应该能够用类型 A 做。
因此,为了进一步调查,我创建了以下内容:
我明白为什么我不允许这样做
因为数组在 Scala 中不是协变的(就像在 Java 中一样)。
但是,我认为我应该能够做到:
我希望 val b 没问题。但我得到:
c++ - 嵌套类中的“无效协变返回类型”错误,方法返回基于模板的对象
以下 C++ 代码在编译时给了我这些错误:
我不想更改该行virtual Q<B> test() {}
,virtual Q<A> test() {}
尽管它消除了编译错误。有没有其他方法可以解决这个问题?