gpt4 book ai didi

rust - 如何定义 Send+Sync 结构并持有 io::Write 成员

转载 作者:行者123 更新时间:2023-11-29 08:06:21 24 4
gpt4 key购买 nike

我有一个结构需要impl给定的特性,它本身就是Send + Sync;我还希望该结构包含 io::Write 的任何泛型类型(但不一定是 Send + Sync)。我完全不知道如何制定它。

假设

struct Foobar<T> {
stream: T,
}

impl<T> Foobar<T>
where T: io::Write
{
pub fn new(stream: T) -> Foobar<T> {
Foobar { stream: stream }
}
}

这不会是 Send + Sync 开始,所以我们可以(不能)做

struct Foobar<T> {
stream: Arc<Mutex<T>>,
}

impl<T> Foobar<T>
where T: io::Write
{
pub fn new(stream: T) -> Foobar<T> {
Foobar { stream: Arc::new(Mutex::new(stream)) }
}
}

impl<T> mycrate::TraitRequiringSendSync for Foobar<T> {
fn write(the_msg: &str) {
self.stream.lock().unwrap().write(...)
}
}

我完全不知道如何制定 stream 的内部类型需要是 io::Write 和整体 impl FoobarSend + Sync

最佳答案

基本上,您只需要将T 约束为Write + Send:

use std::sync::{Arc, Mutex};
use std::io::Write;

//This is the important bit
struct Foobar<T: Write + Send> {
stream: Arc<Mutex<T>>,
}

impl<T: Write + Send> Foobar<T>
{
pub fn new(stream: T) -> Foobar<T> {
Foobar { stream: Arc::new(Mutex::new(stream)) }
}
}

trait Test: Write + Send {}

//verify that Foobar is Send + Sync
impl<T: Write + Send> Test for Foobar<T> { }

关于rust - 如何定义 Send+Sync 结构并持有 io::Write 成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41599921/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com