Я хочу работать с DST и иметь следующий сценарий
У меня есть следующая черта, которая может взять Box
и вернуть новый объект черты снаружи:
pub trait MyTrait {
fn create_from_box(boxed: Box<Self>) -> Self
where
Self: Sized;
}
Я следую различным структурам, которые реализуют MyTrait
struct FirstStruct;
impl MyTrait for FirstStruct {
fn create_from_box(boxed: Box<FirstStruct>) -> FirstStruct {
FirstStruct // Build another struct with some logic and boxed struct values
}
}
struct SecondStruct;
impl MyTrait for SecondStruct {
fn create_from_box(boxed: Box<SecondStruct>) -> SecondStruct {
SecondStruct // Build another struct with some logic and boxed struct values
}
}
У меня есть функция, которая получает мой признак объекта в некоторой условной логике
fn get_my_trait_object() -> Box<MyTrait> {
let condition = true; // Retrieved via some logic .
match condition {
true => Box::new(FirstStruct),
false => Box::new(SecondStruct),
}
}
Затем у меня есть следующая функция, которая получает мой объект-черту в виде упакованного значения и затем передает его в MyTrait
статический метод.
И затем он пытается создать новый объект MyTrait, который будет использоваться позже.
pub fn main() {
let boxed = get_my_trait_object();
let desired_trait_object = MyTrait::create_from_box(boxed);
}
Основная проблема здесь заключается в том, что когда я выполняю код, я получаю две следующие ошибки:
- Размер значений типа
dyn MyTrait
не может быть известен во время компиляции
- Все локальные переменные должны иметь статически известный размер
Как я могу решить эти ошибки и добиться того, что я пытаюсь сделать?
Детская площадка