通过包装限制模板可用
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,
我正在尝试在 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,