繁体   English   中英

如何使用 OR 逻辑指定特征边界

[英]How can I specify trait bounds with OR logic

我希望以通用方式在 Rust 中实现 2D 矩阵功能,其中矩阵的元素将是数字(i32、i64、u32、u64、f32、f64)。 泛型类型如下所示:

#[derive(Debug)]
pub struct Mat<T> {
    data: Vec<T>,
    shape: (usize, usize),
}

impl<T> Mat<T> where T: i32 OR i64 OR u32 OR u64 OR f32 OR f64{
    pub fn new(){
        ...
    }
}

我知道您可以使用+符号以“ where T: bound1 + bound2 ”的形式对特征边界进行AND操作。 有没有办法干净地特征界限在一起?

不,但这通常不是你想要的。 您可以通过声明标签特征来做到这一点,例如:

pub trait NumberType {}

impl NumberTrait for i32 {}
impl NumberTrait for i64 {}
// and so on...

impl<T> Mat<T> where T: NumberType { ... }

但是,通常您实际上想要完成的是强制T支持某些操作,例如加法和乘法。 如果是这样,只需绑定这些操作:

use std::ops::*;

impl<T> Mat<T> where T: Add<T, Output=T> + Mul<T, Output=T> { ... }

这将涵盖所有原始数字类型,但将涵盖定义了这些操作的其他类型,例如第三方“十进制”或“大数”(例如 128/256/512 位整数)类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM