繁体   English   中英

传递盒装特征作为参考

[英]Pass boxed trait as a reference

所以我有一个特征,我想传递并执行一些动态方法调度。 我有一个方法需要特征作为装箱指针,但它需要调用另一个使用特征引用的方法。 所以像:

trait Foo {
    fn do_something(&self);
}

struct Bar;

impl Foo for Bar {
    fn do_something(&self) {}
}

fn foo_as_box(foo : Box<Foo>) {
    foo_as_ref(&foo);
}

fn foo_as_ref(foo : &Foo) {
    foo.do_something();
}

fn main() {
    let boxed_foo = box Bar as Box<Foo>;
    foo_as_box(boxed_foo);
} 

但是,我在此代码上遇到错误

error: failed to find an implementation of trait Foo for Box Foo<no-bounds>

编译器会根据需要自动将Box<Foo>转换为&Foo 你只能说

foo_as_ref(foo);

它会起作用。

这不一定适用于更复杂的情况。 也就是说,编译器不能总是告诉你你想要那种转换。

现在已经实现了DST ,您可以说&*foo进行转换。

在过去,强制它的唯一方法是let绑定,如

let ref_foo: &Foo = foo;

当然,您的用例很简单,您不需要它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM