вернуть трейт?
Потому что трейт сам по себе это не тип
это же по сути фат поинтер, почему нельзя то
всм вернуть трейт
По сути трейт это не тип. А вот dyn трейт - это уже тип, хоть и безразмерный.
не дает ни так trait X { fn foo() -> impl X; } ни так trait X { fn foo() -> dyn X; }
Предлагаю посмотреть на то, что пишет компилятор:/
фат поинтер это дин трейт
1. во-первых у тебя не обжект сейф трейт 2. во-вторых вероятно нужен бокс
В первом случае ты возвращаешь анонимный тип, который имплементирует X.
trait X { type Foo: X; fn foo() -> Self::Foo; } Вероятно ты так хочешь написать
мм, вот так еще работает trait X { fn foo(&self) -> dyn Y; } без селфа дает ошибку
Тоже не оч сейф
ну работает же
потому что ни один язык в мире не разрешает писать статический виртуальный метод (в терминах ООП)
Функции с impl Trait на месте возвращаемого типа в трейтах пока не завезли.
делается ассоц тип как я выше показал и в 99% случаях этого будет хватать
Разве оно вот так компилируется?
трейт описать дает, но имплементировать не получается так
только через бокс
Ну потому что возвращаемый тип из функции должен быть с определённым размером
Обсуждают сегодня