自动导出数字类型的Add,Mul,Ord等

时间:2015-08-09 10:57:24

标签: rust deriving newtype

创建行为类似数字的自定义类型的最简单方法是什么?

我希望类型检查可以防止在我的程序中混合使用不同的单位,但我仍然希望能够轻松地对类型执行计算而不会来回转换(类似于自定义Centimeters和{{1类型)。

如果我创建:

Inches

然后我必须手动实施struct Centimeters(f64); AddMul和许多其他特征。这有很多样板,并且复制和粘贴此代码会产生破坏程序中基本算术的风险:)

不幸的是Ord似乎不受支持。是否有另一种可以达到类似效果的标准特性/类型/箱子?

1 个答案:

答案 0 :(得分:5)

This回答有一个很好的宏来帮助你实现新类型的特征。

现在有一些箱子让这很容易: custom_derivenewtype_derive
它们使您能够

custom_derive! {
  #[derive(NewtypeAdd, NewtypeMul)]
  pub struct Centimeters(i32);
}

为您的新类型实施AddMul

你应该看看https://crates.io/crates/units。那个箱子可能已经允许你做你想做的事了。

另外,https://crates.io/crates/measurements也可能是一个很好的解决方案。