generics - 限制可包装使用的模板

标签 generics rust numbers traits integer-overflow

我正在尝试在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实现Wrapping。可悲的是,Wrapping似乎没有使用任何特征,而是为某些值实现了。

如何限制T通过包装实现?还是有更好的方法来归档我的总体目标?

这是我得到的编译器错误:

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,

关于generics - 限制可包装使用的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59696332/

相关文章:

generics - 默认通用值

.net - Lazy<T> 和线程安全 false 的含义

rust - 一次遍历整个文件一个字符

string - 快速xcode字符串到十进制数

typescript - Duck 在 Typescript 中输入 Promise

java - 继承泛型接口(interface)的子类

docker - Actix Web 在空闲时消耗 %5 的 Cpu

rust - 函数与结构的类型参数(生命周期问题)

algorithm - 计算包含 k 个部分的整数部分,每个部分都低于某个阈值 m

Python从一组数字中获取数字