Как вывести конкретное значение из коробки ? - PullRequest
3 голосов
/ 20 января 2020

У меня есть значение типа T в value: Box<dyn Any> и я хочу извлечь его. Единственный способ, который я нашел, это:

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

Есть ли способ получить v, не требуя T для реализации Default?

1 Ответ

7 голосов
/ 20 января 2020

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
}

См. Также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...