【问题标题】:How to move the concrete value out of a Box<dyn Any>?如何将具体值移出 Box<dyn Any>?
【发布时间】:2020-01-20 13:21:52
【问题描述】:

我在value: Box&lt;dyn Any&gt; 中有T 类型的值并想提取它。我发现的唯一方法是:

let pv = value.downcast_mut::<T>();
let v = std::mem::replace(pv, T::default());

有没有办法在不需要T 实现Default 的情况下获得v?

【问题讨论】:

  • 建议的解决方案无法编译。

标签: rust


【解决方案1】:

Box 有自己的downcast,它返回一个Result&lt;Box&lt;T&gt;, Box&lt;dyn Any&gt;&gt;。一旦你有了Box&lt;T&gt;,你可以简单地取消引用它来获取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
}

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    • 2021-10-08
    相关资源
    最近更新 更多