问题标签 [double-dispatch]
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# 中的双重调度?
我听过/读过这个词,但不太明白它的意思。
我什么时候应该使用这种技术,我将如何使用它?谁能提供一个好的代码示例?
oop - 多态性和多分派有什么区别?
...或者它们是同一件事吗?我注意到每个都有自己的 Wikipedia 条目:Polymorphism、Multiple Dispatch,但我无法看到这些概念的不同之处。
编辑:重载如何适应这一切?
c++ - C ++中的双重调度/多方法
我有一个关于 C++ 双重调度的问题。在下面的代码中,我希望第二组的结果与第一组的结果相匹配。
我不知道实际类型(除非我尝试 dynamic_cast),但我知道该对象继承自 BaseClass 类型。实现这一目标的最有效(性能方面)的方法是什么?
在谷歌搜索了一段时间后,我发现了双重调度和 loki 多方法。我在 Shape 示例中遇到的问题是,在我的应用程序中,Processor 和 BaseClass 是完全独立的,并且没有可以相互调用的通用方法。其次,只有一个处理器(即没有任何东西继承自它)。
谢谢你的帮助。
c++ - 带有镜像层次结构的 c++ 双重分派
以下类层次结构表示抽象资源处理程序和资源层次结构。两者都将接口作为基类。现在想象你编写一个系统,你可以在这些接口下实现多个特定的资源系统。这里只是一个例子。特定的主类创建从 stuff 派生的资源。现在,当创建的资源被传递给基本接口时,它作为指向基本资源类的指针传递,但我想处理特定资源并访问其特定属性。
我知道双重调度,但我认为它在这种情况下不起作用。我想阻止 RTTI 和 dynamic_casts。您对处理此类案件有什么建议吗?
java - Java方法重载+双重分派
任何人都可以详细解释在我的测试代码中print(Parent parent)
使用实例时调用重载方法的原因吗?Child
这里涉及到 Java 中虚拟方法或方法重载/解析的任何特性?任何直接参考 Java 语言规范?哪个术语描述了这种行为?非常感谢。
java - 具有两个参数的方法,这两个参数都需要双重调度
假设我有一个有两个参数的方法。我一直在实施它们:
如您所见,它不是一个非常漂亮的解决方案。我计划使用双重调度来实现,但是有两个参数都需要双重调度,恐怕我有点难过。请有任何想法。
我在java中实现顺便说一句。
visitor-pattern - 访客模式缺少参数
我确定这一定是访问者模式的常见问题,所以我想看看是否有标准解决方案。
你怎么能重新编码一个树遍历,其中方法被内置到树类本身中,比如说
到使用访问者的代码中。想到的两个解决方案是
或将参数添加到 accept(Visitor&) 和 visit() 方法本身。但这并不比类中内置的原始遍历更好。
另一个问题是,如果每个内置遍历方法都采用不同的参数,或者一些返回值而另一些没有,或者它们不都返回相同的类型,会发生什么?
c++ - 什么是单发和双发?
我已经编写了如下的访问者模式,但我不明白什么是单次和双次调度。AFAIK,单调度是调用基于调用者类型的方法,而双调度是调用基于调用者类型和参数类型的方法。
我猜双重分派发生在单类层次结构中,但为什么访问者类有两个类层次结构,但它仍然被认为是双重分派。
请使用我提供的示例代码进行解释。
AFAIK,第一次调度发生在调用接受的对象上,第二次调度发生在调用访问方法的对象上。
谢谢。
c++ - 在 C++ 中具有双重调度的 operator==
应该如何实施
比较子类 st 调用时调用将被正确调度为
c++ - C++:对访问者模式的质疑
我知道访客模式是什么以及如何使用它;这个问题不是这个问题的重复。
我有一个库,其中放置了我编写的大部分可重用代码,并链接到我的大多数项目。
通常我需要向某些类添加特性,但没有将这些新特性添加到库中。让我用一个真实的例子:
在这个库中,我有一个类,由和Shape
继承。CircleShape
PolygonShape
CompositeShape
我现在正在开发一个图形应用程序,我需要在其中渲染这些Shape
,但不想render
在核心Shape
类中放置一个虚函数,因为我使用的一些项目Shape
不进行任何渲染,而其他图形项目可以使用不同的渲染引擎(我在这个项目中使用 Qt,但对于游戏我会使用 OpenGL,因此该render
函数需要不同的实现)。
当然,最有名的方法是使用访问者模式,但这让我产生了一些疑问:
任何库的任何类都可能需要像我Shape
一样进行扩展。大多数公共图书馆(几乎全部)都不提供对访问者模式的任何支持;为什么?我为什么要?
访问者模式是一种在 C++ 中模拟双重调度的方法。它在 C++ 中不是原生的,需要显式实现,这使得类接口更加复杂:我认为该applyVisitor
函数不应该与我的类函数处于同一级别,我认为这就像破坏抽象。
显式向上转换Shape
更dynamic_cast
昂贵,但对我来说它看起来像一个更清洁的解决方案。
所以我该怎么做?在我所有的库类中实现双重调度?如果提供的库Shape
不是我的,而是在互联网上找到的一些 GPL 库怎么办?