簡體   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