簡體   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