问题标签 [static-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 回答
103 浏览

rust - 在不知道我们在编译时使用哪种策略的情况下在 rust 中实现策略模式

我一直在尝试在 rust 中实现策略模式,但我无法理解如何使其工作。

所以让我们假设我们有一个 trait Adder 和 Element:

我们有两个实现 StringAdder 和 StringElements 和 UsizeAdder 和 UsizeElements:

而且我想编写一个使用 Adder trait 的 trait 方法的代码,它是相应的元素,而不知道在编译时将使用哪种策略。

为简化起见,我将为策略和元素分配一个字符串,但通常会从文件中读取。

是使用动态调度实现 get_adder 和 get_element 的唯一方法吗?通过扩展,我应该定义 Adder 和 Element 特征以使用特征对象和/或 Any 特征吗?

编辑:这是我迄今为止设法弄清楚的。

一个可能的实现示例是使用 match 来帮助定义编译器的具体类型。

然而问题是我必须使用匹配函数来包装我想要实现的每个函数来确定具体类型,以及每个可用策略的案例。

它似乎不是实现它的正确方法,因为它会使代码膨胀,使其更容易出错且更不易维护,除非我最终使用宏。

编辑 2:在这里您可以找到使用动态调度的示例。但是我不相信这是实施解决方案的正确方法。

使用动态调度的示例

谢谢您的帮助 :)

0 投票
2 回答
60 浏览

design-patterns - 如何创建基于静态调度的工厂方法?

我想学习设计模式使用 rust 语言。从这段代码中它可以正常工作,但它使用动态调度。如何更改代码以使用静态调度?谢谢!