Amagramming

Rustで複数のTraitをまとめる

March 25, 2019

数値型で汎用に使えるような、 条件分岐や四則演算を含むジェネリクス関数を定義する場合、

fn caluculate<T: Copy + Clone + Eq + Ord + PartialEq + PartialOrd + Add + Sub + Mul + Div>(n: T) -> T {
        // code
    }

これを毎回書くのはしんどいので、

fn caluculate<T: PrimitiveNum>(n: T) -> T {
        // code
    }

としたい。

今日Rustをはじめたので最適解かどうかはわからないけど

trait PrimitiveNum: Copy + Clone + Eq + Ord + PartialEq + PartialOrd + Add + Sub + Mul + Div {}
impl<T: Copy + Clone + Eq + Ord + PartialEq + PartialOrd + Add + Sub + Mul + Div> PrimitiveNum for T {}

こうすればよい。みたい。

(Traitは適宜取捨選択して頂いて。)


Written by rnitta who lives and works in Tokyo building nothing.
You can follow him on Twitter