创建行为类似数字的自定义类型的最简单方法是什么?
我希望类型检查可以防止在我的程序中混合使用不同的单位,但我仍然希望能够轻松地对类型执行计算而不会来回转换(类似于自定义Centimeters
和{{1类型)。
如果我创建:
Inches
然后我必须手动实施struct Centimeters(f64);
,Add
,Mul
和许多其他特征。这有很多样板,并且复制和粘贴此代码会产生破坏程序中基本算术的风险:)
不幸的是Ord
似乎不受支持。是否有另一种可以达到类似效果的标准特性/类型/箱子?
答案 0 :(得分:5)
This回答有一个很好的宏来帮助你实现新类型的特征。
现在有一些箱子让这很容易:
custom_derive和
newtype_derive。
它们使您能够
custom_derive! {
#[derive(NewtypeAdd, NewtypeMul)]
pub struct Centimeters(i32);
}
为您的新类型实施Add
和Mul
。
你应该看看https://crates.io/crates/units。那个箱子可能已经允许你做你想做的事了。
另外,https://crates.io/crates/measurements也可能是一个很好的解决方案。