Я бы хотел определить функцию, которая может возвращать число, тип которого указан при вызове функции. Функция принимает буфер (Vec<u8>
) и возвращает числовое значение, например,
let byte = buf_to_num<u8>(&buf);
let integer = buf_to_num<u32>(&buf);
. Буфер содержит строку ASCII, которая представляет число, например b"827"
, где каждый байт является кодом ASCIIцифра.
Это мой нерабочий код:
extern crate num;
use num::Integer;
use std::ops::{MulAssign, AddAssign};
fn buf_to_num<T: Integer + MulAssign + AddAssign>(buf: &Vec::<u8>) -> T {
let mut result : T;
for byte in buf {
result *= 10;
result += (byte - b'0');
}
result
}
Я получаю несоответствующие ошибки типа как для сложения, так и для умножения (expected type T, found u32
). Поэтому я думаю, что моя проблема в том, как сказать системе типов, что T
можно выразить в виде литерала 10
или в виде результата (byte - b'0')
?