8

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

我想要类型检查以防止在我的程序中混合不同的单元,但我仍然希望能够轻松地对类型执行计算而无需来回转换(类似于自定义CentimetersInches类型的情况)。

如果我创建:

struct Centimeters(f64);

然后我必须手动实现Add,MulOrd许多其他特征。这是很多样板,并且复制和粘贴此代码会产生破坏程序中基本算术的风险:)

不幸的是#[derive(Add, Sub, …)],似乎不支持。是否有另一个可以达到类似效果的标准特征/类型/板条箱?

4

1 回答 1

8

测量单位

你应该看看https://crates.io/crates/measurements。该板条箱包含许多测量单位的定义,如厘米、英尺等。

为你的新类型实现特征

现在有一些板条箱可以很容易地为您的新类型实现Add,Mul等。

派生更多

// This needs rust in the 2018 edition
extern crate derive_more;
use derive_more::{Add, Mul};

#[derive(Add, Mul)]
struct Centimeters(i32);

newtype_derive

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

具有您自己的宏的特征

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

于 2015-08-09T11:03:48.240 回答