Я пытаюсь добавить два числа с целочисленным переполнением в Rust. Тип номера должен быть настраиваемым, для этого я пытаюсь использовать шаблон. Затем я передаю операцию переполнения в структуру Wrapping . Это код:
// T: Copy + Add + Sub + Default + From<u8> + Into<char> + UpperHex
pub fn inc_value(&mut self, value: T) {
self.buffer[self.index] = (Wrapping(self.buffer[self.index]) + Wrapping(value)).0;
}
К сожалению, это приводит к ошибке компиляции, потому что Wrapping (конечно) не всегда реализуется для T. К сожалению, Wrapping, похоже, не использует какие-либо черты, вместо этого она реализована наверняка значения.
Как я могу ограничить использование T в Wrapping? Или есть лучший способ заархивировать мою общую цель?
Это ошибка компилятора, которую я получаю:
error[E0369]: binary operation `+` cannot be applied to type `std::num::Wrapping<T>`
--> src\buffer.rs:28:70
|
28 | self.buffer[self.index] = (Wrapping(self.buffer[self.index]) + Wrapping(value)).0;
| --------------------------------- ^ --------------- std::num::Wrapping<T>
| |
| std::num::Wrapping<T>
|
= note: an implementation of `std::ops::Add` might be missing for `std::num::Wrapping<T>`