には以上の要素がありますが、Iterator
には型パラメータがありません。私は根本的に何かをやろうとしているのを知っています。さび、Iterator
(より具体的Iterator<Item = T>
T
を繰り返すときに得られたタイプである)で構造体のフィールドを `T '要素の` Iterator`にするにはどうしたらいいですか?
2
A
答えて
5
は形質あります。イテレータを表す型はこの特性を実装します。
これはより一般的な質問の例です。「どのように構造体の特性値を格納できますか?」私は故意に質問を不正確な形で表現しました。実際には、を実装する型の値を格納することが必要であり、広く行うには2つの方法があります。
最も簡単な方法は、Box<Iterator<Item = T>>
を使用することですボックス
でそれを入れてください。 Box
は所有ポインタを表し、Rustは特性オブジェクトへのポインタを持っているときにその型に関する実行時情報を含む「ファットポインタ」を作成します。この方法では、反復子の具体的な型はコンパイル時には分かりません。
struct IteratorHolder {
iter: Box<Iterator<Item = u32>>,
}
と使用方法:定義は次のようになります
let ih = IteratorHolder { iter: Box::new(0..10) };
println!("{:?}", ih.iter.collect::<Vec<_>>());
ジェネリック
ヒープ上の任意のボックスを割り当てる回避しながら、同じことを行う別の方法であり、ジェネリック構造体を使用する。このようにして、Iterator<Item = T>
を実装するいくつかの型があります。具体的にはコンパイル時に決定されます。
定義:
struct IteratorHolder<I: Iterator<Item = u32>> {
iter: I,
}
と使用方法:
let ih = IteratorHolder { iter: 0..10 };
println!("{:?}", ih.iter.collect::<Vec<_>>());
関連する問題
- 1. 構造体のフィールドに何らかの型を強制するにはどうしたらいいですか?
- 2. 2つの構造体ポインタから要素にアクセスするにはどうすればよいですか?
- 3. 構造体の配列から要素を削除するにはどうすればよいですか?
- 4. 構造体フィールドをリストからの値にするにはどうすればいいですか?
- 5. 別の構造体の内部にある構造体内の要素にポインタとしてアクセスするにはどうすればよいですか?
- 6. 構造体内に多くの構造体を入れるにはどうすればいいですか?
- 7. 別の構造体から新しい構造体または既存の構造体にコピー
- 8. 構造体の各フィールドからi番目の要素を削除します
- 9. golangの構造体であるスライス要素を変更するにはどうすればよいですか?
- 10. 構造体へのポインタとして構造体をマーシャリングするにはどうすればよいですか?
- 11. 構造体 - なしで構造体要素にアクセスします。そして、 - >
- 12. 名前なしの構造体\共用体を防ぐにはどうしたらいいですか?
- 13. `&T`を` T`に変換するにはどうしたらいいですか?
- 14. フィールド値に基づいて構造体の要素を見つける
- 15. 構造体にハイブサポートオプションのフィールドを行い
- 16. C#では、構造体にどれくらいのメモリが必要ですか?
- 17. 構造体の寿命を '親'構造体の寿命に制限するにはどうしたらいいですか?
- 18. 構造体を含むベクトルを.datファイルにシリアライズするとどうしたらいいですか?
- 19. C:構造体内の構造体要素へのポインタ
- 20. Cはどのように構造体を返しますか?
- 21. 構造体に関数ポインタを格納するにはどうしたらいいですか?
- 22. __attribute __((packed))は、1つの要素しかない構造体にあります
- 23. 構造体からCのフィールドをプリントできない
- 24. どのように構造体に要素が格納されているリストを整理できますか?
- 25. 構造体の複数のフィールドを別の構造体にコピーするにはどうすればよいですか?
- 26. idフィールドはどういう意味ですか? (nf_conntrack構造体メンバ)
- 27. フィールドの1つで構造体のリンクリストをソートするにはどうすればよいですか?
- 28. C++:構造体要素
- 29. 構造体のリストに要素が含まれているかどうか確認してください
- 30. イテレータを(iterator [1:]、iterator [0])型構造体に圧縮する方法はありますか?たとえば