我正在尝试实现一种HashSet
,该类型可以存储遇到的哈希(不关联值)。
我对此有疑问:
Div
,Rem
和Eq
(类似int)的类型上通用。Div
和Rem
的输出才能实现Div
,Rem
和Eq
(我认为)。我愿意取消不符合此条件的类型的资格。我尝试将其简化为一个最小的示例(playground):
use std::ops::{ Rem, Div };
const X: i32 = 16;
pub trait Int: Rem + Div + Eq + Sized {}
impl Int for i32 {}
impl Int for usize {}
// also other int types
pub fn stuff<T: Int>(arg: T) -> T {
(arg / X) % X
}
(我还有一个更详尽的playground来展示我尝试过的内容)。
但是,尽管我理解我得到的错误,但我不知道如何解决它们:
error[E0308]: mismatched types
--> main.rs:13:12
|
13 | (arg / BINS) % BINS
| ^^^^ expected type parameter, found i32
|
= note: expected type `T`
found type `i32`
error[E0369]: binary operation `%` cannot be applied to type `<T as std::ops::Div>::Output`
--> main.rs:13:5
|
13 | (arg / BINS) % BINS
| ^^^^^^^^^^^^^^^^^^^
|
= note: an implementation of `std::ops::Rem` might be missing for `<T as std::ops::Div>::Output`
夜间功能很好。