Есть такой пример fn wtf<RS: Read + Seek>(reader: RS) ->

impl MyTrait {
if ... {
let reader = some_fn(reader); // -> impl Read
return MyTraitImpl::new(reader);
}
return MyTraitImpl::new(reader);
}
суть такая, что в зависимости от условия, функция возвращает разные имплементации трейта, но проблема в том, что такое не работает из-за того, что тип ридера разные и сигнатуры типо тоже разные получается. Сейчас я решил это добавив енум с вариантами того, какие типы этот трейт внутри может содержать + для этого енума реализовал этот трейт для удобства. Но остаётся ощущение что это говнокод какой-то и в расте такие вещи как-то по-другому делают или это норм решение?

1 ответов

10 просмотров

Через энум делаются, либо через dyn объект

Похожие вопросы

Обсуждают сегодня

Карта сайта