小编zma*_*man的帖子

将 Option<impl Trait> 转换为 Option<Box<dyn Trait>>

是否可以将 an 映射Option<impl Trait>到 a Option<Box<dyn Trait>>?如果 的参数new()不是 an Option,则可以将其分配给structwith Some(Box::new(item))。为什么这个可以用而地图却不行?

trait TestTrait {}

impl TestTrait for i32 {}

struct TestStruct {
    item: Option<Box<dyn TestTrait>>
}

impl TestStruct {
    pub fn new(item: Option<impl TestTrait + 'static>) -> Self {
        let item: Option<Box<dyn TestTrait>> = item.map(|i| Box::new(i));
        Self {
            item
        }
    }
}


fn main() {    
    let num:i32 = 0;
    let s = TestStruct::new(Some(num));
}
Run Code Online (Sandbox Code Playgroud)

rust

7
推荐指数
1
解决办法
1469
查看次数

Rust 打印结构地址

我试图在创建结构和删除结构时记录结构地址,当我运行以下代码时,不仅两个结构都记录相同的地址,而且两个结构在删除时都记录不同的地址。有没有正确的方法来做到这一点?

struct TestStruct {
    val: i32
}

impl TestStruct {
    fn new(val: i32) -> Self {
        let x = TestStruct{val};
        println!("creating struct {:p}", &x as *const _);
        x
    }
}

impl Drop for TestStruct {
    fn drop(&mut self) {
        println!("destroying struct {:p}", &self as *const _)
    } 
}

fn main() {
    let s1 = TestStruct::new(1);
    let s2 = TestStruct::new(2);
}
Run Code Online (Sandbox Code Playgroud)

输出:

creating struct 0x7ffef1f96e44
creating struct 0x7ffef1f96e44
destroying struct 0x7ffef1f96e38
destroying struct 0x7ffef1f96e38
Run Code Online (Sandbox Code Playgroud)

rust

2
推荐指数
1
解决办法
144
查看次数

将结构转换为特征

我正在尝试实现一个队列,生产者可以在其中添加一个实现 QueueTrait 的结构,并且当出队时,将在不同的线程上调用该特征的调用方法。由于以下错误,因此无法编译:

self.queue.enqueue(self.data);
                   ^^^^^^^^^ expected trait object `dyn QueueTrait`, found struct `ProducerData`

expected struct `std::sync::Arc<std::boxed::Box<dyn QueueTrait + std::marker::Send>>`
              found struct `std::sync::Arc<std::boxed::Box<ProducerData>>
Run Code Online (Sandbox Code Playgroud)

是否可以将 ProducerData 转换为 QueueTrait?有没有什么方法可以避免将 Producer 完全拆分为 ProducerData ,而只需将 Producer 本身添加到队列中?

self.queue.enqueue(self.data);
                   ^^^^^^^^^ expected trait object `dyn QueueTrait`, found struct `ProducerData`

expected struct `std::sync::Arc<std::boxed::Box<dyn QueueTrait + std::marker::Send>>`
              found struct `std::sync::Arc<std::boxed::Box<ProducerData>>
Run Code Online (Sandbox Code Playgroud)

rust

1
推荐指数
1
解决办法
4574
查看次数

标签 统计

rust ×3