[英]How can I specify that a trait function takes an argument implementing the trait?
[英]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.