Objective
我正在为 struct Publisher
开发订阅者/发布者模式.所以观察者是
trait EventObserver {
fn update_info(&self, info: Information) -> Result<(), Error>;
}
现在,出版商有一个受std::sync::Mutex
保护的字段
struct Publisher {
observer: Mutex<Weak<dyn EventObserver + Send + Sync>>,
}
问题是,如何使用弱到零来初始化发布程序?稍后,我将使用另一个函数"订阅"来设置观察者.请注意,弱类型具有Send和Sync,因为此发布服务器的调用方还需要获取期货.因此,如果没有这些,编译器将会抱怨类型不是发送和同步.
Problems个
如果我以不同的方式编写,则会出现不同的编译器错误
impl Publisher {
pub fn new() -> Publisher {
let publisher = Publisher {
observer: Mutex::new(Weak::new()),
};
publisher
}
}
错误是"无法推断在 struct Weak
上声明的类型参数T
的类型"
但类型是Dyn EventWatch+Send+Sync.如果我这样写,错误是:
(new()) function or associated item cannot be called on `Weak<dyn EventObserver + Send + Sync>` due to unsatisfied trait bounds
note: the following trait bounds were not satisfied:
`dyn publisher::EventObserver + std::marker::Send + std::marker::Sync: std::marker::Sized`
Question个
我只是在寻找一种方法来初始化弱者为零,所以预计observer
的任何升级都会找不到有效的指针.在调用subscribe
之后,那么弱者的后期升级才能成功.
我知道两个解决办法,一个是使用选项来包装弱者,另一个是创建一个实现特征的 struct .与这些解决方法相比,有没有一种干净的方法可以将这个<;dyn T+Send+Sync&>的弱点初始化为空?