Я пытаюсь использовать что-то, эквивалентное следующему коду:
struct MyStruct {}
struct MyStruct2 {}
trait CanDoIt {
fn do_it(&self) -> String;
}
impl CanDoIt for MyStruct {
fn do_it(&self) -> String {
"done".into()
}
}
impl CanDoIt for MyStruct2 {
fn do_it(&self) -> String {
"done 2".into()
}
}
fn do_a<T: CanDoIt>(value: T) -> String {
value.do_it()
}
fn main() {
let s: dyn CanDoIt = if true {
MyStruct {}
} else {
MyStruct2 {}
};
println!("Done it: {}", do_a(s))
}
Условие if может зависеть от некоторого значения времени выполнения, например, поддерживает ли оборудование какую-либо функцию.
Я пробовал разные вещи, такие как создание структуры, также реализующей Sized
, но я всегда получаю некоторую ошибку компиляции, такую как:
|
29 | let s: dyn CanDoIt = if true {
| ^ doesn't have a size known at compile-time
|
Каково решение, когда вам нужно обойти разные реализации в зависимости от некоторыхвремя выполнения?