Я хочу создать struct
, который содержит nalgebra::MatrixN
, который U1
больше:
extern crate nalgebra as na;
use na::{DimName, DimNameAdd, DimNameSum, MatrixN, U1};
pub struct Homogenous<D: DimName>
where
D: DimNameAdd<U1>,
{
mat: na::MatrixN<f32, DimNameSum<D, U1>>,
}
Я получаю следующую ошибку:
error[E0277]: cannot multiply `<<D as na::DimNameAdd<na::U1>>::Output as na::DimName>::Value` to `<<D as na::DimNameAdd<na::U1>>::Output as na::DimName>::Value`
--> src/main.rs:9:5
|
9 | mat: na::MatrixN<f32, DimNameSum<D, U1>>,
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no implementation for `<<D as na::DimNameAdd<na::U1>>::Output as na::DimName>::Value * <<D as na::DimNameAdd<na::U1>>::Output as na::DimName>::Value`
|
= help: the trait `std::ops::Mul` is not implemented for `<<D as na::DimNameAdd<na::U1>>::Output as na::DimName>::Value`
= help: consider adding a `where <<D as na::DimNameAdd<na::U1>>::Output as na::DimName>::Value: std::ops::Mul` bound
= note: required because of the requirements on the impl of `na::allocator::Allocator<f32, <D as na::DimNameAdd<na::U1>>::Output, <D as na::DimNameAdd<na::U1>>::Output>` for `na::DefaultAllocator`
Попытка следовать сообщению об ошибке приводит к кроличьей норе с сообщением об ошибке следующего признака. Я посмотрел на API nalgebra, который не содержит таких сложных цепочек признаков. Например, метод to_homogenous
. Я не уверен, что мой подход даже правильный.
Существует также черта Dim
с соответствующими DimAdd
и DimSum
, однако, поскольку эта часть nalgebra
на самом деле не задокументирована,
Я не знаю, нахожусь ли я на правильном пути - или возможно ли то, что я хочу сделать.