Я считаю, что здесь есть неправильное представление;dyn AB<Prop = A>
и dyn AB<Prop = B>
- это разные типы, первый - динамический AB<Prop = A>
, а второй - динамический AB<Prop = B>
. Это означает, что вы не можете оставить универсальные типы и связанные типы до динамического аспекта.
Это отличается от того, когда связанный тип не упоминается:
fn foo<T: AB>() {
let my_fn: fn(&T, T::Prop) = T::b;
}
Где мы получаем доступ к T::Prop
вместо его присвоения.
Все типы должны быть конкретными, и dyn AB<Prop = A>
на одной ветви, а dyn AB<Prop = B>
на другой ветви не конкретны, но могут быть упакованы в перечисление:
enum AOrB {
A(Box<dyn AB<Prop = A>>),
B(Box<dyn AB<Prop = B>>),
}