实现联合类型容器的最佳方法

时间:2018-09-28 02:07:40

标签: rust

我有很多类型:

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的“实体”。)依赖性问题使得使用诸如枚举之类的方法不合适。

0 个答案:

没有答案