我有一个Component
特征,它有一个返回索引的方法,如下所示:
trait Component {
fn index(&self) -> usize;
}
这些索引用于设置位集中的标志。例如,Component
返回索引 5 的特征对象将导致在容器中设置第 5 位。
目前我手动返回每个实现类型的运行索引:
struct Foo;
struct Bar;
impl Component for Foo {
fn index(&self) -> usize { 0 }
}
impl Component for Bar {
fn index(&self) -> usize { 1 }
}
特征对象被插入到一个容器中,该容器使用位集跟踪添加的组件:
struct Container<'a> {
components: Vec<Component + 'a>,
bits: BitSet
}
impl<'a> Container<'a> {
fn add<T: Component + 'a>(&mut self, component: T) {
self.components.push(component);
self.bits.set(component.index());
}
}
这很好用,但是手动返回每个实现类型的索引很麻烦。我怎样才能让每个实现类型都能自动获取它的索引?