gpt4 book ai didi

rust - 无法将内值移出Arc rust

转载 作者:行者123 更新时间:2023-12-04 07:29:10 30 4
gpt4 key购买 nike

我正在尝试检索 FLTK-RS Widget 周围的 Arc Mutex 包装器的内部值:

pub struct ArcWidget<T: Clone + WidgetExt + WidgetBase>(Arc<Mutex<T>>);


impl<T: Clone + WidgetExt + WidgetBase> ArcWidget<T>{
pub fn widg(&self)->T{
let lock = self.0.clone();
let lock2 = lock.into_inner().unwrap();
lock2
}
pub fn redraw(&self){
let mut widg = self.0.lock().unwrap();
widg.redraw();
}
}
但是,这会导致错误:
let lock = self.0.into_inner().unwrap().clone(); 
cannot move out of an `Arc` - move occurs because value has type `Mutex<T>`, which does not implement the `Copy` trait
我想添加 Clone特质限制可以解决这个问题,但显然没有。我该如何解决这个错误? WidgetExt + WidgetBaseCopy 不兼容,所以我不能添加 Copy性状限制。

最佳答案

对于 pub fn widg(&self) -> T {要工作,有必要制作 T 的完整克隆。值(value)。有了你的问题的所有界限,这看起来像这样:

pub fn widg(&self) -> T {
self.0.lock().unwrap().clone()
}
但这不太可能是您真正想要的。看起来你可能真正想要的是这样的:
pub fn widg(&self) -> &Mutex<T> {
&self.0
}
因为然后任何地方的代码都可以做
let mut widg = self.widg().lock().unwrap();
widg.redraw();
或在内部小部件上调用任何其他方法。

关于rust - 无法将内值移出Arc rust ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68042132/

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