Я пытаюсь работать над математической библиотекой, которая имеет константы и функции. Что мне нужно сделать, чтобы связать значение с чертой, которая использует дженерики?
Функции в моем проекте Rust 1.30.0, в котором в качестве параметров используются обобщения, и мне нужно, чтобы константы соответствовали типу T
, чтобы я мог работать с ними в функции (здесь я также использую число ящиков) :
use num_traits as ntraits; // 0.2.6
use std::{f32, f64};
pub trait consts<T> {
const INGA: T;
}
impl<T> consts<f32> for T {
const INGA: f32 = f32::consts::FRAC_2_SQRT_PI;
}
impl<T> consts<f64> for T {
const INGA: f64 = f64::consts::FRAC_2_SQRT_PI;
}
pub struct CMPS<T> {
pub a: T,
pub b: T,
}
pub type CMPS32 = CMPS<f32>;
pub type CMPS64 = CMPS<f64>;
impl<T: Clone + ntraits::Float + ntraits::FromPrimitive> CMPS<T> {
pub fn cerf(a: T, b: T) -> CMPS<T> {
let pr: T = consts::INGA;
let rtr = a;
let rti = b;
CMPS { a: rtr, b: rti }
}
}
Но когда я пытаюсь выполнить эту привязку, ожидаю, что pr
будет того же типа, что и T
, и будет соответствовать значению INGA
, как это:
let pr: T = consts::INGA;
Выводит только ошибки типа:
error[E0283]: type annotations required: cannot resolve `_: consts<T>`
--> src/lib.rs:27:21
|
27 | let pr: T = consts::INGA;
| ^^^^^^^^^^^^
|
note: required by `consts::INGA`
--> src/lib.rs:5:5
|
5 | const INGA: T;
| ^^^^^^^^^^^^^^