编写通用浮点代码而没有很多样板类型约束

use*_*961 3 generics floating-point rust

有没有办法指定泛型类型T只能是f32f64?否则,我结束了征收大量的样板类型约束:Copy,Add<Output=T>,Sub<Output=T>,Mul...,Div... Zero,One等等,这一段时间后变得乏味.也恐怕这个名单将增长到包括Sin,Cos,Tan等的未来.

mdu*_*dup 5

你想要的num::traits::Float,可以放在箱子里num.

Float保证每种类型都满意Num + Copy + NumCast + PartialOrd + Neg<Output=Self>.反过来,PartialEq + Zero + One + Add + Sub + Mul + Div + Rem是必需的Num.这回答了您对基本算术的第一次要求.其它操作喜欢sin(),cos()都可以在成员函数Float.

最后,f32f64作为实现者提供开箱即用的Float.