J'essaie d'obtenir un &dyn T
d'un Box<dyn T>
comme dans l'exemple suivant. Cependant, il ne parvient pas à compiler.
trait MyTrait {
}
struct Foo;
impl MyTrait for Foo {}
fn main() {
let b: Box<dyn MyTrait> = Box::new(Foo);
let c: &dyn MyTrait = &b;
}
Le message d'erreur est le suivant
error[E0277]: the trait bound `Box<dyn MyTrait>: MyTrait` is not satisfied
--> src/main.rs:10:27
|
10 | let c: &dyn MyTrait = &b;
| ^^ the trait `MyTrait` is not implemented for `Box<dyn MyTrait>`
|
= note: required for the cast to the object type `dyn MyTrait`
Il est clair que vous pouvez obtenir un &T
d'un Box<T>
. Je ne comprends pas pourquoi vous ne pouvez pas obtenir un &dyn T
d'un Box<dyn T>
.
0 votes
Cela pourrait être lié au fait que le dyn T n'est pas dimensionné et ne peut donc pas être représenté par un pointeur standard. doc.rust-lang.org/nightly/std/boxed/index.html#mory-layout