mod float_trait {
pub trait Float {
const INITIAL_VALUE: Self;
}
impl Float for f32 {
const INITIAL_VALUE: Self = 0.3;
}
impl Float for f64 {
const INITIAL_VALUE: Self = 0.3;
}
}
// ...
impl<T: Float> FloatStruct<T> {
pub fn new() -> Self {
Self {
_a: 2,
_b: String::from("hi"),
c: T::INITIAL_VALUE,
}
}
}
// ...
From<f64>
, только TryFromтакже, чтобы результат лежал не в heap
получить вектор символов из исходного байт-вектораа почему бы тогда
Vec<char>
не использовать? для понимания, - почему блок A работает, а B - нет:
c.to_string().as_str()
, а ссылка на него в рамках всего блока В. Ссылка не может жить дольше чем то, на что она ссылается.правильно ли я делаю, если важна скорость и нужно конвертировать из Vec_u8 в Vec_Stringважна скорость чего?
u03.push(c.to_string().as_str());
тут Вы сохраняете ссылку на временный объект строки. Строка дропнется прямо на этой же строке, а ссылка на нее останется, а следовательно будет не валидной. Rust запрещает творить такую дичь, и хорошо что запрещает, в плюсах такой код был бы UB. Box::new(value)
value сначала будет на стеке и потом переместится на кучу, так что тут опять упираемся в размер стека, хотя это обходится через unsafe и работу с аллокатором.