最简单的方法是添加一个方法,该方法从
Arc<Asset>
到
Arc<dyn Any>
下列的
as-any
,我们可以在自定义特性中做到这一点,并对其进行全面实现:
pub trait AsAnyArc {
fn as_any_arc(self: Arc<Self>) -> Arc<dyn Any>;
}
impl<T: 'static> AsAnyArc for T {
fn as_any_arc(self: Arc<Self>) -> Arc<dyn Any> { self }
}
pub trait Asset: AsAnyArc { ... }
let res: Box<dyn Asset> = thing_that_returns_dyn_asset();
let res: Arc<dyn Asset> = Arc::from(res);
let res: Arc<dyn Any> = res.as_any_arc();