私は、構造体を持っている:ライフタイムを追加すると、すべてのダウンストリーム構造体にライフタイムを追加しないようにする方法はありますか?
struct C {
field: Box<Fn()>
}
struct D(C)
struct E(C)
struct F(D)
は私が名前の機能に対応するために、代わりに&Fn()
にC
のフィールドを変更したいです。 Rust構造体の参照フィールドには生涯パラメータが必要なので、問題が発生します。 C
は今でなければなら:
struct C<'a> {
field: &'a Fn()
}
その後D
、E
、F
のために、私も生涯のパラメータを指定する必要があります。
struct D<'a>(c<'a>)
struct E<'a>(C<'a>)
struct F<'a>(C<'a>)
はF
が多くimpl
の機能を持っている、D
、E
を想像してみ..多くの場所に生涯パラメータを追加するには、コードを大幅に変更する必要があります。
これを回避する方法はありますか? C
の有効期間パラメータは'static
にはできません。ローカルに定義されたクロージャもあります。
ありがとうございました。また、明確化のためにShipmasterに多くのthx。 – kkspeed
通常の関数はゼロサイズです。ボクシングでは、ゼロサイズの型は割り当てをまったく実行しません(アロケータはポインタに対して単に '1'を返します)。 –
@FrancisGagné:本当ですか?確かにランタイムには、呼び出す関数を知るための関数へのポインタが必要です。 –