将子特征指针转换为超特征指针

时间:2017-05-13 21:14:24

标签: pointers rust polymorphism

我有一个结构Foo,它实现了特征AB,其中BA的子特征。我现在将&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)也无济于事。为什么这不起作用?

0 个答案:

没有答案