смог кастоваться из u64 через as?
struct Data<T>(T);
impl<T: Sized> Data<T> {
fn new(val: u64) -> Self {
Self(val as T)
}
}
fn main() {
Data::<u8>::new(0_u64);
}
Вот хотелось бы как-то указать что T должен уметь val as T, где val u64
Никак. Только Into<u64>.
блин, не получается красивого решения тогда.. печаль)
Есть либа num-traits вроде, там есть трейт для примитивного каста
значит они как-то смогли наложить ограничение.. попробую посмотреть) мне интересно как это сделано
Руками имплементировали, или макросами, скорее всего
а как это можно имплементировать? допустим для некоторого набора типов.. только u8, u16, u32
Макросом: https://docs.rs/num-traits/0.2.12/src/num_traits/cast.rs.html#507-568
Обсуждают сегодня