问题标签 [dynamic-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 投票
0 回答
92 浏览

rust - 包含关联类型(也是动态调度)的特征向量(动态调度)

我有一个特点:


这个特性有很多实现(每个实现都包含一个特定的错误类型):


我需要创建插件向量:

但是代码抛出了这个错误:

如何重新组织代码以创建impl trait Plugin包含关联类型(也是动态调度)的插件向量(动态调度impl trait error::Error)?

--

这是完整的代码:

锈操场

0 投票
1 回答
1306 浏览

scala - 具有参数化函数的 Scala 动态调度

如何使这段代码工作?

据我所知,Scala 没有动态调度(类似于 Java)。是否可以以某种方式模拟动态调度?

或者最好的解决方案是什么?

0 投票
2 回答
519 浏览

java - Java 中没有 instanceof 或 getClass() 的动态调度

我有以下域对象:

然后我有另一个模块,它应该与我的域对象完全解耦,这意味着它知道域对象,但域对象不应该知道这个附加模块的存在。

在这个模块中,我通过通用接口接收对象Event,我需要根据特定的事件类型采取不同的行动。

目前我的代码如下所示:

它工作得很好,但是静态分析工具和代码审查者抱怨我不应该使用instanceof它,我应该用更多的面向对象的方法来替换它。反射或getClass()也不是一种选择。

如何在 Java 中做到这一点?

我已经查看了许多关于替换的现有问题,instanceof但所有这些问题都建议将一些逻辑直接添加到域对象中。但是,在这种情况下,我不想用特定于我的模块的逻辑来污染它们。

0 投票
3 回答
65 浏览

c++ - C++ 中的虚方法重写

假设我们有一个名为的抽象类Vehicle

我们有它的子类BicycleCar

然而,这段代码抛出了 SomeExceptionClass:

在这里做什么?C++ 不允许我们以这种方式使用多态方法吗?

任何帮助将不胜感激。谢谢。

编辑:提供答案dynamic_cast<>decltype变体也很好?

0 投票
2 回答
140 浏览

c++ - C++ 或 D:在没有动态调度的情况下解耦类的习惯用法?

我是性能的真正爱好者,但我也意识到执行自动化测试的重要性(直到更好的形式验证方法成为主流)。

缺点是当您尝试设计可测试性时,您开始引入接口来表示您的依赖关系。如您所知,接口使您的调用在该依赖项上动态分派,并减少了编译时的优化机会。

确实存在一种更好的方法来单元测试类,而无需在生产中采用动态调度成本。如果需要,我可以负担单元测试执行的成本,但不能负担生产版本的成本。

我对 D 和 C++ 解决方案感兴趣。

0 投票
3 回答
202 浏览

smalltalk - Smalltalk 动态查找优化

在 Smalltalk 中,在运行时查找方法可能涉及大量步骤,因为子类的方法字典不包含其超类中的方法,并且需要指针追踪来查找方法。对每个子类进行优化以将所有超类方法存储在其方法字典中。
问题:如何做到这一点?

一个明显的缺点是空间成本,但我只是想知道如何在 Smalltalk 中做到这一点?这与为最近调用的方法制作单独的缓存不同。

0 投票
0 回答
37 浏览

c++ - 循环依赖实现双重调度

假设我在 Visual Studio 的项目 X 中定义了一个基类 Shape 和一个来自 Shape 的派生类 Triangle。我在项目 Y 中还有一个类转换,我希望能够在其中动态调用适当的方法:

我正在尝试使用遵循this的访问者模式来做到这一点。

在 Shape.cpp 和 Triangle.cpp 中,我实现了以下方法:

但是,项目 X 是在项目 Y 之前编译的,项目 Y 依赖于项目 X,这给我留下了循环依赖。

不幸的是,向前声明 Transformations 类是不够的,因为它的成员函数的知识是必要的。

该线程中提供的答案在这方面没有帮助。

0 投票
1 回答
340 浏览

ios - 将objective-c动态绑定转换为swift 2

我有一种情况,我正在将 obj-c 项目转换为 swift。如下

我担心的是这样做的快速方式是什么?

0 投票
2 回答
81 浏览

java - 具有超类和子类签名的 Java 2 函数 - 尽管子类的类型是子类,但仍选择超类

我有以下代码:

据我所知,equals方法选择应该以这种方式工作:在编译时将选择签名,并且由于s是编译时类型(例如),因此应该选择type带有参数的方法,并且因为是then的一个实例我们将进入我们的实现而不是's。Stringb1MainMainequalsObject

但是,在调试时,我看到我Main使用 type 参数输入了实现Object

我看到了那 2 篇文章:
基于参数的真实类型的重载方法选择- 没有解释我的情况,而是类型为sObject 的情况。

https://stackoverflow.com/a/8356435/4345843 - 据我所知,这个答案如果属实,支持我的理论。

很高兴得到解释。

0 投票
1 回答
529 浏览

generics - 隐藏和接收通用 T 对象

给出以下 Rust 代码:

Wrapper<T>Vec存储来自列存储的通用的、详细的数据列。相应的实现返回Vec或特定元素作为参考。

Inter<T>和特征的想法GetInter是隐藏T来自 Wrapper 的Vec<T>泛型数据类型的泛型对象。该get_count()方法仅用于测试目的。

create_vector()Vec使用一些样本数据创建两个新的 s。结果被转换为GetInter,包装成 aBox并存储在 a 中Vec<Box<GetInter>>。最后,调用者将创建一个新ColumnWrapper元素。现在给出了一个通用的数据表示。

编译运行后得到正确结果:

现在真正的问题开始了。我尝试访问存储在Wrapper<T>.

我的第一个想法是使用 Rust 的动态调度功能。它应该在运行时检测真实的数据类型。

main()功能修改:

相应且未测试的dyn_dispatch()功能:

编译失败并抛出错误:

85:2 错误:Foo<_>类型的特征实现冲突Inter<_>:[E0119]

知道如何修复编译错误或隐藏和访问通用对象的另一个更简单的想法吗?T