Нет проблем с возвратом объектов свойств из методов свойств в Rust:
trait Foo {
fn bar(&self) -> Box<dyn Bar>;
}
Следует отметить, что вам нужно возвращать Box<dyn Bar>
, а не dyn Bar
, поскольку размер dyn Bar
неизвестно во время компиляции, что делает его бесполезным.
Когда вы реализуете эту черту, подпись должна совпадать, поэтому она должна возвращать Box<dyn Bar>
, а не impl Bar
:
impl Foo for MyFoo {
fn bar(&self) -> Box<dyn Bar> {
Box::new(MyBar{})
}
}