下面的代碼將無法編譯這個錯誤是由於兩個實例:鏽特質對象轉換
error[E0277]: the trait bound
Self: std::marker::Sized
is not satisfied
爲什麼Sized
在這種情況下,需要既&self
和&Any
是指針和我不明白操作不需要知道實現特徵的結構的大小,它只需要知道指針本身以及它正在轉換的類型,因爲&self
在特徵中實現時是通用的。
我認爲這可能是編譯器實施不必要的限制的一個實例,我考慮過提交rust-lang GitHub repo的問題,但我想我應該看看是否有人知道我以前不知道的東西去申請一個問題。
use std::any::Any;
trait Component: Any {
fn as_any(&self) -> &Any {
self
}
fn as_any_mut(&mut self) -> &mut Any {
self
}
}
對此的另一種方法是使as_any()
和as_any_mut()
所需的功能對於實現這一特性的結構,但對於那些結構的實施將始終是完全按照此處顯示到每一個人的性格,導致幾個實例相同的樣板代碼。
我刪除了我的答案,因爲我找不到足夠快的文檔鏈接。然而,我的理解是,性狀中的「自我」是未定義的,沒有明確地將你的特徵標記爲「Sized」,編譯器會將其視爲未確定和錯誤。 –
我認爲制定所需的方法是最好的選擇。至少我以前見過這種模式。爲了避免重複的代碼,你可以編寫一個簡單的宏'impl_conversion_functions!()'或類似的東西。 –