我有一个结构Foo
,它实现了特征A
和B
,其中B
是A
的子特征。我现在将&Foo
传递给alpha
函数&B
,它按预期工作。但是,在函数alpha
中,我尝试将指针传递给函数beta
,该函数需要&A
,编译器会抱怨它预期特性A
,但得到了特征{{ 1}}。请参阅以下代码:
B
我希望这可行,因为特征trait A {}
trait B : A {}
struct Foo {}
impl A for Foo {}
impl B for Foo {}
fn alpha(x: &B) {
beta(x);
}
fn beta(x: &A) {}
中的函数是B
中函数的超集。因此,给定A
的vtable,我应该能够通过选择正确的函数指针来构造B
的vtable。显式转换(A
)也无济于事。为什么这不起作用?