稀疏矩阵计算库sprs
没有实现trait<'a> Mul<'a CsMat> for f64
导致无法计算如下式子f64 * CsMat
。但是我尝试实现这个trait直接失败了,说是不能为外部库实现外部库的trait,我可以理解这是孤儿原则
的体现,我目前的做法是使用pub struct MyCsMat
包装一层。请问,还有其他做法吗?
#[derive(Debug, PartialEq, Clone)]
pub struct MyCsMat {
data: CsMat<f64>,
}
impl<'a> Mul<&'a MyCsMat> for f64 {
type Output = MyCsMat;
fn mul(self, other: &'a MyCsMat) -> Self::Output {
MyCsMat{ data: other.data.map(|i| i * self) }
}
}
1
共 4 条评论, 1 页
评论区
写评论好吧,老实用
enum
包装了。--
👇
jonirrings: 根据孤儿原则,不能。
new type是指?如果是说
type MyCsMat = CsMat<f64>
或是type MyCsMat = Box<CsMat<f64>>
,都不行的啊。用enum
也是可行的,但是貌似复杂度和写struct
是一样的。都没法利用CsMat
已经重载的所有运算符。--
👇
Mike Tang: 可以考虑newtype一下。
根据孤儿原则,不能。
可以考虑newtype一下。