问题标签 [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.

0 投票
5 回答
23280 浏览

c# - C# 中的双重调度?

我听过/读过这个词,但不太明白它的意思。

我什么时候应该使用这种技术,我将如何使用它?谁能提供一个好的代码示例?

0 投票
7 回答
8778 浏览

oop - 多态性和多分派有什么区别?

...或者它们是同一件事吗?我注意到每个都有自己的 Wikipedia 条目:PolymorphismMultiple Dispatch,但我无法看到这些概念的不同之处。

编辑:重载如何适应这一切?

0 投票
4 回答
5925 浏览

c++ - C ++中的双重调度/多方法

我有一个关于 C++ 双重调度的问题。在下面的代码中,我希望第二组的结果与第一组的结果相匹配。

我不知道实际类型(除非我尝试 dynamic_cast),但我知道该对象继承自 BaseClass 类型。实现这一目标的最有效(性能方面)的方法是什么?

在谷歌搜索了一段时间后,我发现了双重调度和 loki 多方法。我在 Shape 示例中遇到的问题是,在我的应用程序中,Processor 和 BaseClass 是完全独立的,并且没有可以相互调用的通用方法。其次,只有一个处理器(即没有任何东西继承自它)。

谢谢你的帮助。

0 投票
4 回答
458 浏览

c++ - 带有镜像层次结构的 c++ 双重分派

以下类层次结构表示抽象资源处理程序和资源层次结构。两者都将接口作为基类。现在想象你编写一个系统,你可以在这些接口下实现多个特定的资源系统。这里只是一个例子。特定的主类创建从 stuff 派生的资源。现在,当创建的资源被传递给基本接口时,它作为指向基本资源类的指针传递,但我想处理特定资源并访问其特定属性。

我知道双重调度,但我认为它在这种情况下不起作用。我想阻止 RTTI 和 dynamic_casts。您对处理此类案件有什么建议吗?

0 投票
2 回答
4920 浏览

java - Java方法重载+双重分派

任何人都可以详细解释在我的测试代码中print(Parent parent)使用实例时调用重载方法的原因吗?Child

这里涉及到 Java 中虚拟方法或方法重载/解析的任何特性?任何直接参考 Java 语言规范?哪个术语描述了这种行为?非常感谢。

0 投票
1 回答
141 浏览

java - 具有两个参数的方法,这两个参数都需要双重调度

假设我有一个有两个参数的方法。我一直在实施它们:

如您所见,它不是一个非常漂亮的解决方案。我计划使用双重调度来实现,但是有两个参数都需要双重调度,恐怕我有点难过。请有任何想法。

我在java中实现顺便说一句。

0 投票
0 回答
284 浏览

visitor-pattern - 访客模式缺少参数

我确定这一定是访问者模式的常见问题,所以我想看看是否有标准解决方案。

你怎么能重新编码一个树遍历,其中方法被内置到树类本身中,比如说

到使用访问者的代码中。想到的两个解决方案是

或将参数添加到 accept(Visitor&) 和 visit() 方法本身。但这并不比类中内置的原始遍历更好。

另一个问题是,如果每个内置遍历方法都采用不同的参数,或者一些返回值而另一些没有,或者它们不都返回相同的类型,会发生什么?

0 投票
2 回答
11501 浏览

c++ - 什么是单发和双发?

我已经编写了如下的访问者模式,但我不明白什么是单次和双次调度。AFAIK,单调度是调用基于调用者类型的方法,而双调度是调用基于调用者类型和参数类型的方法。

我猜双重分派发生在单类层次结构中,但为什么访问者类有两个类层次结构,但它仍然被认为是双重分派。

请使用我提供的示例代码进行解释。

AFAIK,第一次调度发生在调用接受的对象上,第二次调度发生在调用访问方法的对象上。

谢谢。

0 投票
2 回答
578 浏览

c++ - 在 C++ 中具有双重调度的 operator==

应该如何实施

比较子类 st 调用时调用将被正确调度为

0 投票
5 回答
2895 浏览

c++ - C++:对访问者模式的质疑

我知道访客模式是什么以及如何使用它;这个问题不是这个问题的重复


我有一个库,其中放置了我编写的大部分可重用代码,并链接到我的大多数项目。

通常我需要向某些类添加特性,但没有将这些新特性添加到库中。让我用一个真实的例子:

在这个库中,我有一个类,由和Shape继承。CircleShapePolygonShapeCompositeShape

我现在正在开发一个图形应用程序,我需要在其中渲染这些Shape,但不想render在核心Shape类中放置一个虚函数,因为我使用的一些项目Shape不进行任何渲染,而其他图形项目可以使用不同的渲染引擎(我在这个项目中使用 Qt,但对于游戏我会使用 OpenGL,因此该render函数需要不同的实现)。

当然,最有名的方法是使用访问者模式,但这让我产生了一些疑问:

任何库的任何类都可能需要像我Shape一样进行扩展。大多数公共图书馆(几乎全部)都不提供对访问者模式的任何支持;为什么?我为什么要?

访问者模式是一种在 C++ 中模拟双重调度的方法。它在 C++ 中不是原生的,需要显式实现,这使得类接口更加复杂:我认为该applyVisitor函数不应该与我的类函数处于同一级别,我认为这就像破坏抽象。

显式向上转换Shapedynamic_cast昂贵,但对我来说它看起来像一个更清洁的解决方案。


所以我该怎么做?在我所有的库类中实现双重调度?如果提供的库Shape不是我的,而是在互联网上找到的一些 GPL 库怎么办?