我有很多类型:
struct A { cool_thing: &'static str }
struct B {}
struct C {}
struct D {}
我还有一种识别类型的方法,例如
trait Name {
fn name(&self) -> &'static str;
}
impl Name for A {
fn name(&self) -> &'static str { return "A"; }
}
// etc.
鉴于上述情况,为这些类型实现容器的最佳方法是什么?例如,我想要这样的东西:
struct Container {
item: Box<Name>,
}
impl Container {
fn new(item: Box<Name>) -> Container {
return Container { item: item };
}
fn get_item(&self) -> &Name {
return self.item.as_ref();
}
}
稍后,我想使用此容器:
let a = A { cool_thing: "Yah!" };
let container = Container::new(Box::new(a));
let thing = container.get_item();
if thing.name == "A" {
// How to access cool_thing here?
}
这如何完成?
我希望Container
能够存储对象而无需显式依赖它们。这是为了避免可能的循环依赖关系,即对象可能想要消耗Container
并使用某种局部类型填充它(特别是我正在尝试实现entity-component-system的“实体”。)依赖性问题使得使用诸如枚举之类的方法不合适。