使用where子句的不可用特性

时间:2019-11-02 19:45:46

标签: rust traits

我在Rust中有以下代码

use num_complex::Complex64;

pub trait RealComplex where Self : std::iter::Sum, for<'a,'b> &'a Self : std::ops::Mul<&'b Complex64, Output=Complex64> {}

impl RealComplex for f64 {}
impl RealComplex for Complex64 {}

struct A<T> {
    a : T
}

impl<T : RealComplex> A<T> {
    fn get(self) -> T {
        self.T
    }
}

操场上的链接:https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=410e0410353bc2fbcefcdce3dcaf2621

特性RealComplex意味着类型实现std::iter::Sum,并且我可以将此类型的引用乘以Complex64的引用。

但是似乎没有编译器抱怨我根本无法使用此特征。

我想完成的事情:我想要一个通用的Matrix Type,它仅实现像这样的Matrix-Vector乘法:

struct SparseMatrix<T> {
    data : Vec<Vec<T>>
}

impl<T : RealComplex> SparseMatrix<T> {
    fn multByVec(&self, &[Complex64]) -> Vec<Complex64> {
       ...
    }
}

这应该在f64Complex64上通用

0 个答案:

没有答案