我有以下代码:
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:15:11
|
15 | boxed.baz();
| ^^^
为什么这是不可能的?当我删除Self: Sized
绑定时它可以工作,但是我不能使用泛型来使调用者更舒适。
这不是为什么 trait 中的泛型方法需要调整 trait 对象的大小?它问为什么你不能baz
从特征对象调用。我不是在问为什么需要绑定;这已经讨论过了。