【发布时间】:2017-09-11 03:10:46
【问题描述】:
背景:我正在使用nalgebra 库,我想创建一个表示多元正态分布的结构。 M 是矩阵的类型,例如Mat4<f64>.
我目前的尝试是这样的:
use std::ops::Mul;
use std::marker::PhantomData;
use nalgebra::*;
#[allow(non_snake_case)]
pub struct Multivar????<N, V, M: SquareMat<N, V>> {
μ: V,
Σ: M,
marker: PhantomData<N>
}
impl<N, V, M> Mul<Multivar????<N, V, M>> for M {
type Output = Multivar????<N, V, M>;
fn mul(self, rhs: Multivar????<N, V, M>) -> Multivar????<N, V, M> {
Multivar???? {
μ: self * rhs.μ,
Σ: self * rhs.Σ * transpose(&self)
}
}
}
但是,编译器抱怨:
error: type parameter `M` must be used as the type parameter for some local type (e.g. `MyStruct<T>`); only traits defined in the current crate can be implemented for a type parameter
和
error: conflicting implementations for trait `core::ops::Mul`
我不认为这应该是一个错误,因为我正在为我在此模块中定义的结构定义一个实现。我应该如何解决这个问题?
【问题讨论】:
-
SquareMat是否为N、V提供类型,所以您可以制作类似:pub struct Multivar????<M: SquareMat<N, V>> { μ: M::V, Σ: M, marker: PhantomData<M::N> } -
请提供minimal compilable and verifiable example,最重要的是您的代码缺少
SquareMat特征,并且您的错误消息引用了无处显示的MyStruct类型。对于 Rust 问题,如果您的错误在 play.rust-lang.orgplay.rust-lang.org