0
대신 발신자 측의 함수로 권투를 이동하는 방법 : 나는 또한 다른 구조에서 이러한 구조를 저장하고자내가 어떤 구조의 특성과 그 구현이
trait Named {
fn name(&self) -> String;
}
struct Americano;
impl Named for Americano {
fn name(&self) -> String { String::from("Caffè Americano") }
}
을 :
struct Menu {
item: Box<Named>,
}
impl Menu {
pub fn new(item: Box<Named>) -> Self {
Menu { item: item }
}
}
나는 main
기능 구조를 권투하고 때 경우에 완벽하게 작동합니다 :
fn main() {
let s = Menu::new(Box::new(Americano));
}
나는 Menu
의 함수 내에서 권투를 이동하고 같은 것을 사용하는 방법을 궁금 : I는 new
구현하기 위해 노력했다
fn main() {
let s = Menu::new(Americano);
}
:
impl Menu {
pub fn new<T: Named>(b: T) -> Self {
Menu { item: Box::new(b) };
}
}
을하지만 난 오류가 발생
error: the parameter type `T` may not live long enough [--explain E0310]
--> <anon>:19:23
|>
19 |> Menu { item : Box::new(b) };
|> ^^^^^^^^^^^
help: consider adding an explicit lifetime bound `T: 'static`...
note: ...so that the type `T` will meet its required lifetime bounds
여기는 code in the playground입니다. 당신의 구조체에
이 대답은 컴파일러가 제안 이유를 설명 * T'바인딩 명시 적으로 수명 추가하는 것을 고려 ... * – Shepmaster
이 두 번째 변형은 충분합니다, 감사 'static'을. 아직도 궁금해서, 녹이 T가 충분히 오래 살지 못할 것이라고 생각하는 이유는 무엇입니까? 함수에 값의 소유권 (차용 제외)을 전달하고 값을 복싱하려고합니다. 전달 된 값이 어떻게 파괴 될 수 있는지 상상할 수 없습니까? –
@seb_odessa : 소유권을 전달한 값은 빌린 포인터이거나 빌린 포인터를 포함 할 수 있습니다. 수명 한계는 컴파일러가 지시 대상을 초과하여 사용하는 방식으로 값을 이동하지 않는다는 것을 컴파일러가 확인하는 데 도움이됩니다. –