源码:
trait MT {
fn run(self: Box<Self>) -> Box<dyn MT> {
self.a();
let t: Box<dyn MT> = self;
t
}
fn a(&self);
}
编译报错:
3 | let t: Box<dyn MT> = self;
^^^^ doesn't have a size known at compile-time
我的理解是trait的默认实现里因为无法获知Self的具体类型,所以无法获取到MT trait对应的vptr,从而无法进行动态转换,但是又可以在默认实现方法里调用其它的trait 方法,这个就很奇怪