Почему универсальный метод внутри признака требует размера объекта признака?
я есть следующий код:
trait Bar {
fn baz(&self, arg: impl AsRef<str>) where Self: Sized;
}
struct Foo;
impl Bar for Foo {
fn baz(&self, arg: impl AsRef<str>) {}
}
fn main() {
let boxed: Box<dyn Bar> = Box::new(Foo);
boxed.baz();
}
Что приводит к этой ошибке:
error: the `baz` method cannot be invoked on a trait object
--> src/main.rs:13:11
|
13 | boxed.baz();
| ^^^
Почему это невозможно? Работает при удаленииSelf: Sized
однако, я не могу использовать генерики, что довольно удобно для звонящего.
Этоне дубликатПочему универсальный метод внутри признака требует размера объекта признака?, Этот вопрос спрашивает о том, почему вы не можете позвонитьbaz
от черты объекта. яне спрашиваю, зачем нужна граница. Это уже былообсуждается.