8

数値のように動作するカスタム型を作成する最も簡単な方法は?

プログラムで異なるユニットが混在するのを防ぐ型チェックが必要ですが、キャストを行ったり来たりせずに型の計算を簡単に実行できるようにしたいと考えています (カスタムCentimetersInches型の場合と同様)。

私が作成した場合:

struct Centimeters(f64);

Add次に、 、MulOrdおよび他の多くの特性を手動で実装する必要があります。これは多くの定型文であり、このコードをコピーして貼り付けると、プログラムの基本的な算術演算が壊れるリスクが生じます:)

残念ながら#[derive(Add, Sub, …)]対応していないようです。同様の効果を達成できる別の標準的な特性/タイプ/クレートはありますか?

4

1 に答える 1

8

測定単位

https://crates.io/crates/measurementsをご覧ください。そのクレートには、センチメートル、フィートなどの多くの測定単位の定義が含まれています。

newtypes の特性を実装する

Addnewtype の 、 などの実装を非常に簡単にするクレートがいくつかあり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);
}

独自のマクロを使用した特徴

この回答には、newtype の特性を実装するのに役立つ便利なマクロがあります。

于 2015-08-09T11:03:48.240 に答える