막연한 제목으로 미안하지만 녹이기가 매우 어렵습니다. 간결하게 내 문제를 요약하는 방법을 정확히 알지 못합니다. 나는 (최소한의 예를 나타내는) 뭔가를 구현하기 위해 노력하고있어컴파일러는 매개 변수 유형이 오래 지속되지 않을 수도 있기 때문에 '정적 수명'을 추가 할 것을 제안하지만 그게 내가 원하는 것 같지 않습니다.
은 다음과 같습니다
(지금까지 내가 말할 수있는) 패스에 의해 소유, 내 정신 모델은 생각에 녹 기본값 이후trait Bar<T> {}
struct Foo<T> {
data: Vec<Box<Bar<T>>>
}
impl<T> Foo<T> {
fn add<U: Bar<T>>(&mut self, x: U) {
self.data.push(Box::new(x));
}
}
이게 효과가있다. add 메서드는 개체 x
의 소유권을 가져 와서이 개체를 Box
으로 옮길 수 있습니다.이 개체는 전체 형식 U
을 알고 있으므로 (Bar<T>
은 아님)이 개체를 이동할 수 있습니다. 상자 안으로 옮겨지면 상자 안의 항목 수명이 상자의 실제 수명과 연결되어야합니다 (예 : pop()
개체가 파괴 될 때).
그러나 컴파일러는 동의어에 동의하지 않으며 확실하다고 생각합니다. 'static
평생 한정자 (E0310) 추가를 고려해달라고 요청합니다. 나는 내가 원하는 바가 아니라는 것을 99 % 확신하지만, 나는 내가해야 할 일을 정확히 모르겠다.
Box<T>
은 본질적으로 어떤 주석없이std::unique_ptr<T>
- 이며, 변수에 의해 전달된다
Copy
값 및 기준 주석 달리 - r- 수치 참조하면
&
대략const&
이고&mut
대략&
이고
- 기본 수명은
감사합니다. –