为什么 T 实现 A+B 但不实现特征 C:A+B?
Why does T implement A+B but not trait C: A+B?
我对这个例子感到困惑。即使 i32
实现了所有 Num + One + Zero + PartialOrd + RemAssign + Ord
,当我将它们放入特征中以便我可以提供别名时,它也不起作用。
use num_traits::{Num, identities::One, identities::Zero};
use std::cmp::{Ord, PartialOrd};
use std::ops::RemAssign;
pub trait Math: Num + One + Zero + PartialOrd + RemAssign + Ord {}
fn s<T: Num + One + Zero + PartialOrd + Ord + RemAssign>(t: T) {
unimplemented!();
}
fn ss<T: Math>(t: T) {
unimplemented!();
}
fn sss() {
let x: i32 = 5;
ss(x);
}
有没有办法强制所有实现 Num + One + Zero + PartialOrd + RemAssign + Ord
的东西都实现 Math
?
是的,通过添加毯子实现:
impl<T: Num + One + Zero + PartialOrd + RemAssign + Ord> Math for T {}
我对这个例子感到困惑。即使 i32
实现了所有 Num + One + Zero + PartialOrd + RemAssign + Ord
,当我将它们放入特征中以便我可以提供别名时,它也不起作用。
use num_traits::{Num, identities::One, identities::Zero};
use std::cmp::{Ord, PartialOrd};
use std::ops::RemAssign;
pub trait Math: Num + One + Zero + PartialOrd + RemAssign + Ord {}
fn s<T: Num + One + Zero + PartialOrd + Ord + RemAssign>(t: T) {
unimplemented!();
}
fn ss<T: Math>(t: T) {
unimplemented!();
}
fn sss() {
let x: i32 = 5;
ss(x);
}
有没有办法强制所有实现 Num + One + Zero + PartialOrd + RemAssign + Ord
的东西都实现 Math
?
是的,通过添加毯子实现:
impl<T: Num + One + Zero + PartialOrd + RemAssign + Ord> Math for T {}