问题标签 [trait-objects]

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 投票
1 回答
15115 浏览

rust - Sending trait objects between threads in Rust

I'd like to send a trait object between threads, but can't figure out if it's possible. It seems like it might not be, as they apparently do not fulfill the Send trait.

The following code demonstrates what I'm trying to do:

This fails with the following message:

Trying to send a plain, unboxed trait object results in a bunch of other errors, mostly complaining about not fulfilling Send + Sized.

I'm still fairly new to Rust, so I'm not sure if there's something I'm missing, but I get the impression that there isn't a way to convince the compiler to make the trait object Send.

If it isn't currently possible, is there any work currently under way that may allow for this in the future?

0 投票
2 回答
237 浏览

syntax - Rust 中的 impl TraitX for TraitY 是什么意思?

例如:

我想这与

但错误消息另有说明:

在 Rust 中(或它impl TraitX for TraitY的某些具有显式生命周期的变体)是否意味着什么?如果是这样,它的使用示例是什么?

0 投票
3 回答
12739 浏览

rust - 是什么使某物成为“特征对象”?

最近的 Rust 更改使“特征对象”对我来说更加突出,但我对究竟是什么使某些东西成为特征对象只有模糊的把握。一个特别的变化是即将到来的变化,允许 trait 对象将 trait 实现转发到内部类型。

给定一个 trait Foo,我很确定Box<Foo>/Box<dyn Foo>是一个 trait 对象。&Foo/&dyn Foo也是一个特征对象吗?像Rcor之类的其他智能指针Arc呢?我怎样才能使自己的类型算作 trait 对象?

参考文献只提到了一次 trait 对象,但没有像定义一样。

0 投票
2 回答
130 浏览

rust - How to get the v-ptr for a given Trait/Struct combination?

In Rust, a &T where T is a trait is a fat reference, which actually corresponds to raw::TraitObject:

Using TraitObject, one can de-construct and re-construct a &T at leisure.

However, while obtaining the vtable from de-constructing a &T is easy, what if I never have the &T in the first place, but just a T and S; essentially, something along the lines of:

How could I divine the v-ptr from there? Is there any intrinsic I could use?

Note: the naive implementation of creating a S (or conjuring it from thin-air) and then making a &T reference does not work; the compiler complains that T is not necessarily a trait and therefore that &T is either one pointer or two pointers in size.

0 投票
0 回答
162 浏览

casting - 我怎样才能施放 Rc到 Rc>>

我有一个 traitMyTrait和一个MyStruct实现MyTrait.

我还有一个接受Rc<RefCell<Box<MyTrait>>>作为参数的函数。

在代码的某处,我创建了一个实例Rc<RefCell<Box<MyStruct>>>

当我传递my_struct给我的函数时,我得到一个编译器错误:

错误:不匹配的类型:预期alloc::rc::Rc<core::cell::RefCell<Box<MyTrait>>>,找到alloc::rc::Rc<core::cell::RefCell<Box<MyStruct>>>

我尝试Rc<RefCell<Box<MyStruct>>>通过显式指定我需要的类型来创建一个实例来解决这个问题:

在这种情况下,传递my_struct给我的函数可以正常工作,但是我不能再通过变量访问任何MyStruct特定字段。my_struct而且这似乎不是一种贬低Rc<RefCell<Box<MyTrait>>>Rc<RefCell<Box<MyStruct>>>.

我该如何解决这个问题?

0 投票
1 回答
2613 浏览

rust - 我如何通过 Rc>> 到接受 Rc 的函数>>?

我最初在这里问过这个问题,但它被标记为重复,尽管在我看来它只重复了一部分,所以我创建了一个更具体的问题:

考虑以下代码:

这段代码工作正常。现在我想将定义更改trait_func为接受 a &mut self,但它Rc仅适用于不可变数据。我使用的解决方案是包装MyTraitRefCell

当我编译它时,我得到一个错误:

解决此问题的最佳方法是什么?

0 投票
1 回答
166 浏览

rust - 为什么某些 std::fmt::Debug* 方法使用动态调度?

这些方法使用动态调度(接收一个 trait 对象&Debug作为参数):

这些方法使用静态调度,并根据相关entry方法编写:

为什么第一个方法列表使用动态调度而不是静态调度?如果使用静态调度,它们的使用会受到限制吗?

0 投票
1 回答
847 浏览

rust - 从 u8 切片创建读取特征对象

我正在尝试Read从切片创建一个特征对象u8,以便在murmur3板条箱中使用,就像这样

但我明白了

这段代码有什么问题?

0 投票
3 回答
1710 浏览

rust - 你如何创建一个盒子,或者一般来说是一个装箱的未调整大小的值?

我有以下代码

它抱怨说

我不明白为什么它需要Sizedon RngwhenBox<T>不强加于T.

0 投票
3 回答
1383 浏览

rust - Rust 中的混淆错误与特征对象生命周期

谁能告诉下面的代码有什么问题?编译器抱怨生命周期,但错误消息绝对没有意义。我已经尝试了我能想到的一切,但似乎没有任何帮助。

编译器错误是

这完全没有意义。借款人的寿命如何?我什至没有使用借来的价值!