如何存储枚举,以便仅通过识别变体来检索它?

时间:2017-08-23 10:28:13

标签: rust

我有一个类似的枚举:

pub enum Component {
    Position { vector: [f64; 2] },
    RenderFn { render_fn: fn(Display, &mut Frame, Entity), },
}

我想将Component存储在一个hashset / hashmap中,只有它们的枚举变体(PositionRenderFn)才能识别它们。

集合中可以有零个或一个Position和零个或一个RenderFn。我希望能够通过传递标识符/类型(Position / RenderFn)来删除/检索它。

有没有办法在没有任何丑陋的黑客的情况下做到这一点?也许枚举不是要走的路?

1 个答案:

答案 0 :(得分:2)

It sounds like you want a structure, not a collection of enum variants.

struct Component {
    position: Option<[f64; 2]>,
    render_fn: Option<fn(Display, &mut Frame, Entity)>,
}

If this is likely to involve many kinds of components, and they mostly won't all be present, then maybe you want something like the typemap包。

但要回答你的问题:不,不能将变体与其相关值分开。