未显式实现TFoo trait的NotTFoo能否转为dyn TFoo trait对象?
这种转换不可行
这种转换是完全不可行的,原因在于Rust的trait系统是显式实现的——哪怕结构体的方法签名和trait定义完全一致,只要没有通过impl TFoo for NotTFoo的语法明确声明实现该trait,编译器就不会将两者关联起来。
你遇到的错误提示the trait bound 'NotTFoo: TFoo' is not satisfied已经直接说明了问题:trait对象dyn TFoo要求被包裹的类型必须严格实现TFoo trait,而NotTFoo并没有满足这个约束,自然无法完成类型转换。
如果想让NotTFoo能作为TFoo trait对象使用,只需要补上显式的trait实现即可:
impl TFoo for NotTFoo { fn say_hi(&self) { // 直接复用结构体自身的say_hi方法逻辑 self.say_hi() } }
补完这段代码后,原代码中的Box::new(not_foo) as Box<dyn TFoo>就能正常编译通过了。
内容的提问来源于stack exchange,提问作者user5819540
相关产品推荐
相关产品推荐

