나는 구조체가있다. 녹 구조체의 참조 필드에는 평생 매개 변수가 필요하므로 문제가 발생합니다. C
지금이어야한다 :평생을 추가 할 때 모든 다운 스트림 구조체에 수명을 추가하지 않는 방법이 있습니까?</p> <pre><code>struct C { field: Box<Fn()> } struct D(C) struct E(C) struct F(D) </code></pre> <p>내가라는 이름의 기능을 수용 할 수 <code>C</code> 대신 <code>&Fn()</code>의 분야를 변경하려면 :
struct C<'a> {
field: &'a Fn()
}
그런 D
, E
, F
, 나는뿐만 아니라 수명 매개 변수를 제공해야 :
struct D<'a>(c<'a>)
struct E<'a>(C<'a>)
struct F<'a>(C<'a>)
이 D
, E
, F
많은 impl
기능을 가지고 상상 ... 이제 코드는 많은 장소에 평생 매개 변수를 추가하기 위해 대규모 변경이 필요합니다.
그렇게하지 않는 방법이 있습니까? C
의 수명 매개 변수는 'static
일 수 없으며 로컬로 정의 된 클로저도 있습니다.
감사합니다. 그리고 또한 설명을 위해 Shipmaster에게 많은 thx. – kkspeed
일반 함수의 크기는 0입니다.복싱 zero-sized 타입은 전혀 할당을 수행하지 않습니다 (할당자는 포인터에 대해 단지'1'을 반환합니다). –
@ FrancisGagné : 확실한가요? 확실히 런타임에는 호출 할 함수를 알 수있는 함수에 대한 포인터가 필요합니다. –