【发布时间】:2018-08-20 06:20:54
【问题描述】:
#[derive(Default)]
struct Bar;
#[derive(Default)]
struct Baz;
fn main() {
let mut vec = Vec::<Box<dyn Default>>::new();
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::default::Default` cannot be made into an object
vec.push(Box::new(Bar));
vec.push(Box::new(Baz));
}
Default 是一个 sized Trait,表示你是 cannot convert it to a trait object。
对于上面的示例,是否有解决方法,以便我可以将大小特征存储在 Vec(或任何其他集合)中?
【问题讨论】:
-
我认为没有任何解决方法。拥有默认值向量有什么意义?它应该如何工作?
-
你可以调用 trait 提供的方法(在本例中为
default),就像使用任何其他 trait 一样。 -
你想做工厂吗?
-
@hellow 这是一个不需要
self的工厂函数。尝试使用一些已经存在的对象(例如obj.default())来调用它是没有意义的。 -
@ozkriff 我已将这一点添加到我的答案中
标签: rust