如何将具体值移出 Box<dyn Any>?

Mic*_*yin 6 rust

我有一个类型的值Tvalue: Box<dyn Any>,并希望将其解压。我找到的唯一方法是:

let pv = value.downcast_mut::<T>();
let v = std::mem::replace(pv, T::default());
Run Code Online (Sandbox Code Playgroud)

v没有不需要T实现的方法Default

tre*_*tcl 10

Box有它自己的downcast返回一个Result<Box<T>, Box<dyn Any>>. 一旦你有了一个,Box<T>你可以简单地取消引用它来T取出。这是使用它的一种方法:

fn get<T: Any>(value: Box<dyn Any>) -> T {
    let pv = value.downcast().expect("The pointed-to value must be of type T");
    *pv
}
Run Code Online (Sandbox Code Playgroud)

也可以看看: