trait-objects相关内容

函数指针与FN特征对象

fn do_twice(f: fn(i32) -> i32, arg: i32) -> i32 { // definition f(arg) + f(arg) } do_twice(|x| x + 1, 5) // call 此函数同时接受、闭包和函数指针。它以函数指针作为参数类型。 什么时候我应该更喜欢使用特征对象,如&dyn Fn(i32) -> i32或Box ..
发布时间:2022-05-25 19:42:35 其他开发

了解特征和对象安全

我正在努力学习对象安全的基础知识.如果我有这个代码 struct S {x: i32,}特质特质:大小{fn f(&self) ->i32在哪里自我:尺码;}fn object_safety_dynamic(x: Trait) {} 我收到 error[E0038]: trait `Trait` 不能变成一个对象-->src/lib.rs:11:29|5 |特质特质:大小{|----- -- ..
发布时间:2021-12-25 09:42:10 其他开发

在 Rust 中的线程之间发送特征对象

我想在线程之间发送一个 trait 对象,但不知道是否可行.看起来可能不是,因为它们显然不满足 Send 特性. 以下代码演示了我正在尝试执行的操作: 使用 std::{同步::mpsc::{通道,接收器,发送器},线,};特质栏{fn bar(&self);}结构 Foo {富:i32,}为 Foo { impl Bar {fn bar(&self) {println!("foo: {} ..
发布时间:2021-12-25 09:31:03 其他开发

什么使某物成为“特征对象"?

最近的 Rust 更改使“特征对象"对我来说更加突出,但我对真正使某些东西成为特征对象的原因只有模糊的了解.一项特别的变化是 即将到来的变化,以允许 trait 对象将 trait 实现转发到内部类型. 给定一个特征 Foo,我很确定 Box/Box 是一个 trait 对象.&Foo/&dyn Foo 也是 trait 对象吗?其他诸如 Rc 或 Arc 之类的智能指针的东西呢?我怎样才能 ..
发布时间:2021-12-25 09:26:13 其他开发

为什么不能将 `&(?Sized + Trait)` 转换为 `&dyn Trait`?

在下面的代码中,不可能从对实现相同特征的动态大小类型的引用中获取对特征对象的引用.为什么会这样?&dyn Trait 和 &(?Sized + Trait) 如果我可以同时使用两者来调用 trait 方法,那么这两者究竟有什么区别? 实现 FooTraitContainerTrait 的类型可能例如have type Contained = dyn FooTrait 或 type Conta ..
发布时间:2021-12-15 10:14:34 其他开发

特性不能被做成一个对象

我有以下代码: extern crate 期货;//0.1.24使用期货::未来;使用 std::io;结构上下文;酒吧特质 MyTrait {fn 接收(上下文:上下文)->Future;}酒吧结构我的结构{我的特质:我的特质,} 当我尝试编译它时,我收到错误消息: error[E0038]: trait `MyTrait` 不能变成一个对象-->src/lib.rs:13:5|13 |我 ..
发布时间:2021-12-15 09:38:18 其他开发

如何在 Rust 中按值传递装箱的 trait 对象?

我正在编写一些代码,并且有一个特性,它带有一个按值获取 self 的方法.我想在 Box 的 trait 对象上调用这个方法(消耗 Box 及其值).这可能吗?如果是这样,如何? 在代码方面,一个最小的例子看起来像下面的(不完整的)代码: trait 消耗品 {fn 消耗(自我)->u64;}fn consumer_box(ptr: Box) ->u64 {//我可以在这里放什么?} 我 ..
发布时间:2021-09-09 19:04:51 其他开发

为什么具有泛型类型参数的 trait 方法是对象不安全的?

引用本书(强调我的), 当使用 trait 时,用具体类型参数填充的泛型类型参数也是如此:具体类型成为实现 trait 的类型的一部分.当通过使用 trait 对象忘记类型时,无法知道用什么类型填充泛型类型参数. 我无法理解其中的原理.对于一个具体的例子,请考虑以下 pub trait Echoer {fn echo (&self, v: T) ->;}酒吧结构 Foo { } ..
发布时间:2021-09-09 19:03:30 其他开发

特质不能成为一个对象

我正在使用光线跟踪器,并且希望对所有可击中对象进行建模以提供一个公共界面. 我实现了一个名为Object的特征,所有可点击对象都实现了该特征.我创建了一个名为Intersection的结构,其中包含f32值和对实现对象特征的结构的引用. 代码: 使用std :: sync :: atomic :: {AtomicUsize,Ordering};使用super :: ray :: Ra ..
发布时间:2021-05-10 18:53:35 其他开发

如何克隆Rc特征对象并将其转换为另一个特征对象?

这是来自“>不同的表情.当我们使用特征对象的引用时,那里提供的解决方案工作得很好,但是这次我尝试使用Rc指针做同样的事情.例如 我有一个名为TraitAB的超级特征和两个名为TraitA和TraitB 的特征 因此,当我第一次创建类型为TraitAB的特征对象而不是使用Box时,现在我使用的是Rc指针. 我需要类型为TraitA的变量作为ab 的引用 这里我举了一个非常小的例子: ..
发布时间:2020-07-26 01:44:13 其他开发