【发布时间】:2020-10-16 21:30:09
【问题描述】:
我有以下定义:
trait A {
fn f(&self);
}
trait B: A {
// ...
}
我想实现这种功能:
fn convert(v: Rc<RefCell<dyn B>>) -> Rc<RefCell<dyn A>> {
}
我希望有一种方法可以返回共享同一对象的值,这意味着使用以下声明:
let x: Rc<RefCell<dyn B>> /* = ... */;
let y = convert(Rc::clone(&x));
调用x.f() 和y.f() 将调用应用于同一个对象。
我如何实现函数convert 或如何更改类型定义以具有那种行为和那种转换(到子对象的转换)。
【问题讨论】:
-
Clone an Rc<RefCell<MyType> trait object and cast it 是大致相同的问题,但接受的答案并不能真正解决问题。
-
是的@trentcl,这确实解决了问题,因为 TraitAB 不能成为特征对象(导致方法签名中的 Self),但我很欣赏这个想法。
标签: rust subtyping trait-objects