Rust 自动派生数字类型的Add、Mul、Ord等

Rust 自动派生数字类型的Add、Mul、Ord等,rust,deriving,newtype,Rust,Deriving,Newtype,创建行为类似于数字的自定义类型的最简单方法是什么 我希望类型检查能够防止在程序中混合不同的单位,但我仍然希望能够轻松地对类型执行计算,而无需来回转换(类似于自定义厘米和英寸类型) 如果我创建: struct Centimeters(f64); 然后我必须手动实现Add、Mul、Ord和许多其他特性。这是大量的样板文件,复制和粘贴此代码可能会破坏程序中的基本算法:) 不幸的是,#[derivate(Add,Sub,…)]似乎不受支持。是否还有其他标准特性/类型/板条箱可以达到类似效果?计量单位

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

我希望类型检查能够防止在程序中混合不同的单位,但我仍然希望能够轻松地对类型执行计算,而无需来回转换(类似于自定义
厘米
英寸
类型)

如果我创建:

struct Centimeters(f64);
然后我必须手动实现
Add
Mul
Ord
和许多其他特性。这是大量的样板文件,复制和粘贴此代码可能会破坏程序中的基本算法:)

不幸的是,
#[derivate(Add,Sub,…)]
似乎不受支持。是否还有其他标准特性/类型/板条箱可以达到类似效果?

计量单位 你应该看看。该板条箱包含许多测量单位的定义,如厘米、英尺等

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

用你自己的宏
answer有一个很好的宏来帮助您实现新类型的特征。

看起来所有的解决方案都使用宏,所以我建议将此添加到语言中:使用rust 1.15,您现在可以使用我的板条箱来完成此操作:您应该尝试我的板条箱,它为许多特征添加了此功能:
// This needs rust in the 2018 edition
extern crate derive_more;
use derive_more::{Add, Mul};

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