例えば、長さを2乗して配列を操作します。一般的な固定長配列で関数を定義する方法は?
これは、ジェネリック型(のような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.
に設定され、同じ方法の種類は、一般的なことができますか?
参照[ジェネリックの型パラメータを使用してメンバ配列のサイズを制御することはできますか?](http://stackoverflow.com/q/28136739/155423)およびすべてのリンクされた重複 – Shepmaster