通过包装限制模板可用

Restrict a Template to be useable by Wrapping

我正在尝试在 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;
}

遗憾的是,这会导致编译错误,因为包装(当然)并不总是为 T 实现。遗憾的是,包装似乎没有使用任何特征,而是为某些值实现的。

如何限制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>`

错误消息中的注释会告诉您该怎么做;您需要添加约束:

where
    Wrapping<T>: Add,