Конвертация объекта Rust Trait

Следующий код не скомпилируется из-за двух случаев этой ошибки:

ошибка [E0277]: ограничение чертыSelf: std::marker::Sized не устраивает

Я не понимаю почемуSized требуется в этом случае как&self а также&Any являются указателями, и операция не требует знания размера структуры, которая реализует признак, она требует только знания самого указателя и типа, из которого он преобразуется, в который он будет иметь, потому что&self является общим, когда реализовано внутри черты.

Я думаю, что это может быть примером того, как компилятор навязывает ненужные ограничения, и я подумал о том, чтобы подать проблему с репозиторием GitHub от rust-lang, но я подумал, что, возможно, мне следует выяснить, знает ли кто-то здесь что-то, чего я не знаю, прежде чем подать проблему ,

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() требуемые функции для структур, которые реализуют эту черту, но для этих структур реализация всегда будет точно такой, как показано здесь для каждого отдельного символа, что приводит к нескольким экземплярам идентичного шаблонного кода.

Ответы на вопрос(2)

Ваш ответ на вопрос