为什么T实现A+B而不实现特征C:A+B? [英] Why does T implement A+B but not trait C: A+B?
本文介绍了为什么T实现A+B而不实现特征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 {}
这篇关于为什么T实现A+B而不实现特征C:A+B?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文