【发布时间】:2019-05-25 16:44:46
【问题描述】:
我的程序有一堆对通用整数进行操作的函数。它们通常具有以下形式:
use num::{FromPrimitive, Integer, ToPrimitive};
use std::cmp::Ord;
use std::ops::{Add, Mul};
fn function<'a, I>(n: &'a I) -> I
where
I: Integer + Clone + FromPrimitive + ToPrimitive,
for<'b> &'b I: Mul<Output = I> + Add<Output = I> + Ord,
{
}
我想给泛型类型要求起别名:
I: Integer + Clone + FromPrimitive + ToPrimitive,
for<'b> &'b I: Mul<Output = I> + Add<Output = I> + Ord,
这样我就不需要每次都重写它们。最初,我认为宏会有所帮助,但看起来它们不像在 C 中那样工作,所以我寻找了另一种方法。
我找到了一种方法来满足第一个要求。必须对任何类型 T 的已定义特征应用默认实现。
trait GInteger: Integer + Clone + FromPrimitive + ToPrimitive {}
impl<T: Integer + Clone + FromPrimitive + ToPrimitive> GInteger for T {}
那么我可以简单地写:
I: GInteger
而不是
I: Integer + Clone + FromPrimitive + ToPrimitive,
如何为第二个要求设置别名?有可能吗?
for<'b> &'b I: Mul<Output = I> + Add<Output = I> + Ord,
【问题讨论】:
标签: rust