稀疏矩阵计算库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一下。