テストケース:単位を扱う
共通の単位同士を扱う際のチェックのために、Add
を幽霊型を用いた実装にすると便利な場合があります。その場合Add
トレイトは以下のようになります。
// このように定義しておくと、`Self + RHS = Output`であることが保証され、
// かつ、impl時にRHSの型が明示されていない場合、デフォルトでSelfと同じに
// なります。
pub trait Add<RHS = Self> {
type Output;
fn add(self, rhs: RHS) -> Self::Output;
}
// `Output`は`T<U>`でなくてはならないので`T<U> + T<U> = T<U>`となります。
impl<U> Add for T<U> {
type Output = T<U>;
...
}
以下は全体を示した例です。
参照
借用 (&
), 境界 (X: Y
), 列挙型, impl & self, 演算子のオーバーロード, ref, トレイト (X for Y
), タプル構造体.