Я некоторые черты, которые (после удаления функций и некоторые параметра наворотов) выглядят как:Реализация Вложенные Черты характера
trait Foo { }
trait Boo { }
trait Bar<T: Foo> { }
trait Baz { }
Если U
реализует Bar<T>
для некоторых T
реализующего Foo
иU
реализует Boo
, то один может для осуществления внедрения Baz
для U
. Тем не менее, я не смог написать действующий код Rust.
Несколько попыток были:
impl<T: Foo, U: Bar<T> + Boo> Baz for U { }
который дает
error: the type parameter
T
is not constrained by the impl trait, self type, or predicates [E0207]
тогда
impl<U: Bar<T> + Boo> Baz for U { }
дает
error: type name
T
is undefined or not in scope [E0412]
Может ли один/как это сделать (стабильный) Rust (надеюсь, без динамической отправки)?
Редактировать: Некоторые люди намекают на некоторые подобные вопросы, на которые были по существу два подхода (и я считаю их обоих непригодны для моей ситуации):
- Использование связанных с ними типов. Я не хочу этого делать, потому что хочу отслеживать
T
, например. Я хочу написать некоторые функции, у которых есть подпись, например,fn bla<T: Foo, U: Bar<T>, V: Bar<T>>()
, где я хочу знать, чтоU
иV
реализоватьBar<T>
для таких жеT
. (Или существует способ сделать это со связанными типами?) - Использование какой-либо упаковки путем помещения
U
иT
в структуру. Я не хочу использовать это либо потому, что у меня есть несколько уровней таких «зависимостей свойств», поэтому обертывание вещей на каждом уровне сильно раздувает код.
Таким образом, обновленный вопрос: Есть ли решение этой проблемы без использования связанных типов или оболочек?