为什么T实现A+B而不实现特征C:A+B? [英] Why does T implement A+B but not trait C: A+B?

查看:16
本文介绍了为什么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);
}

Playground

是否有办法强制实现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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆