io::Write
構造体の内部に特性オブジェクトへの参照を保存したいのですが、Option
方法がわかりません。次のように直接参照を入れることができます。
pub struct Parameters<'a> {
pub log: &'a (io::Write + 'a),
// Other elements removed
}
次に、(たとえば)次のBufWriter
ように割り当てます。
let logstream = &BufWriter::new(f);
let parameters = Parameters {
log: logstream, // Other elements removed
};
これは機能しますが、オプションにしたいと思いlogstream
ます。私が試してみると:
pub struct Parameters<'a> {
pub log: Option<&'a(io::Write + 'a)>,
// Other elements removed
}
と
let logstream = match f {
Some(f) => Some(&BufWriter::new(f)),
None => None,
};
let parameters = Parameters {
log: logstream,
// Other elements removed
};
私は得る:
error[E0308]: mismatched types
--> src/main.rs:17:14
|
17 | log: logstream,
| ^^^^^^^^^ expected trait std::io::Write, found struct `std::io::BufWriter`
|
= note: expected type `std::option::Option<&dyn std::io::Write>`
found type `std::option::Option<&std::io::BufWriter<std::vec::Vec<u8>>>`
ここで適切なアプローチは何ですか?