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();
}