Как определить функцию с универсальным массивом фиксированной длины?

Возьмите операцию над массивами, возведя в квадрат длину, например.

Полезно иметь универсальный тип (такой какf32, f64), но вы также можете хотеть общую длину, ноне динамическая длина.

Вот пример функции в квадрате, которая принимает 2 аргумента.

use std::ops::{Add, AddAssign, Sub, Mul};

const CAN_THIS_BE_GENERIC: usize = 2;

fn squared_length<T>(
    a: &[T; CAN_THIS_BE_GENERIC],
    b: &[T; CAN_THIS_BE_GENERIC]
) -> T
    where T:
        Copy +
        Add +
        AddAssign +
        Add<Output=T> +
        Sub<Output=T> +
        Mul<Output=T>
{
    let mut d: T = a[0] - a[0];  // zero :(
    for (elem_a, elem_b) in a.iter().zip(b.iter()) {
        let elem_dim: T = *elem_a - *elem_b;
        d += elem_dim * elem_dim;
    }
    return d;
}

fn main() {
    println!("Length A! {}", squared_length::<f64>(&[0.5, 3.5], &[10.0, 0.0]));
    println!("Length B! {}", squared_length::<i32>(&[10, -6], &[4, 8]));
    println!("Length C! {}", squared_length::<f32>(&[-3.0, 0.0], &[9.0, 0.0]));
}

В настоящее время длина вектора установлена ​​на 2.

Можно ли определить универсальные функции, где размер не динамический, а универсальный, так же, как типы могут быть универсальными?

Ответы на вопрос(2)

Ваш ответ на вопрос