LoginSignup
1
1

More than 5 years have passed since last update.

Rustでtupleの中身をイテレートしたい

Posted at

C++のboost::fusionみたいに、タプルの中身をイテレートしたいと思ったのでいろいろ試してみたところ、下記の方法で、ちょっと特別な形のタプルを使えば出来ました。

他にアイデアあったら教えてください!


// タプルの各要素に対して実装するトレイト これが順番に呼ばれる
trait Hoge {
    fn hoge(&self);
}
impl<T> Hoge for T where T:std::fmt::Display {
    fn hoge(&self) {
        println!("{}", *self);
    }
}

// タプルの中身に対して順番にhoge()を呼ぶためのトレイト
trait Next {
    fn next(&self);
}
impl Next for (()) {
    fn next(&self) {
    }
}
impl<T,U> Next for (T,U) where T:Hoge, U:Next {
    fn next(&self) {
        self.0.hoge();
        self.1.next();
    }
}

fn main() {
    //タプルは、こんな形にしないとダメ(マクロで作れるようにすると良いかも)
    let v = (1, (2.3, ("abc".to_string(), ())));
    v.next();
}

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1