对象安全和特质继承

时间:2015-05-18 18:56:51

标签: rust

我正在调查使用生锈特征的对象安全性,并根据以下代码,我有几个问题。

trait Foo {}
trait Bar : Foo {}

struct Baz;

impl Foo for Baz {}

impl Bar for Baz {}

fn do_foo(_: &Foo) {
    println!("Doing foo stuff.");
}

fn do_bar(_: &Bar) {
    println!("Doing bar tuff.");
}

fn main() {
    let x = Baz;

    let y: &Foo = &x;
    do_foo(y);

    let y: &Bar = &x;
    do_bar(y);
    // do_foo(y); -- Does not compile with mismatched types error, Expected: &Foo, found &Bar
}
  1. 由于Bar继承自Foo,为什么无法将&Bar强制转换为&Foo
  2. 此问题是否有解决办法,不需要将do_foo声明为通用?可能是do_foo本身可能需要存在于对象安全特征上。

0 个答案:

没有答案