相关疑难解决方法(0)

如何为盒装特征对象实现`serde :: Serialize`?

我试图为结构创建一个通用向量时遇到了问题.这是我的第一次尝试:

#[derive(Serialize)]
struct Card {
    sections: Vec<Section<WidgetTrait>>
}

#[derive(Serialize)]
struct Section<T: WidgetTrait> {
    header: String,
    widgets: Vec<T>
}
Run Code Online (Sandbox Code Playgroud)

这使我遇到了一个Sized未实现的错误,并且WidgetTrait在编译时未知大小.

我的下一次尝试是这样使用Box<WidgetTrait>:

#[derive(Serialize)]
struct Section {
    header: String,
    widgets: Vec<Box<WidgetTrait>>
}
Run Code Online (Sandbox Code Playgroud)

操场

这导致了一个错误:

error[E0277]: the trait bound `WidgetTrait: serde::Serialize` is not satisfied
  --> src/main.rs:11:10
   |
11 | #[derive(Serialize)]
   |          ^^^^^^^^^ the trait `serde::Serialize` is not implemented for `WidgetTrait`
   |
   = note: required because of the requirements on the impl of `serde::Serialize` for `std::boxed::Box<WidgetTrait>`
   = note: required …
Run Code Online (Sandbox Code Playgroud)

polymorphism rust serde

7
推荐指数
1
解决办法
1762
查看次数

标签 统计

polymorphism ×1

rust ×1

serde ×1