我正在尝试实现如下所示的算法。我不知道如何使局部变量足够长。可能是我的设计完全错误。
trait Metric {
fn on_add(&mut self, _i: i32);
}
trait Update {
fn update(&mut self, _i: i32);
}
struct Metric1 {}
impl Metric for Metric1 {
fn on_add(&mut self, _i: i32) {
unimplemented!()
}
}
impl Update for Metric1 {
fn update(&mut self, _i: i32) {
unimplemented!()
}
}
struct Metric2 {}
impl Metric for Metric2 {
fn on_add(&mut self, _i: i32) {
unimplemented!()
}
}
impl Update for Metric2 {
fn update(&mut self, _i: i32) {
unimplemented!()
}
}
struct collector<'a> {
metrics: Vec<&'a mut dyn Metric>,
}
fn main() {
let mut vector_metrics: Vec<Box<dyn Metric>> = Vec::new();
let mut vector_update: Vec<Box<dyn Update>> = Vec::new();
for i in 0..2 {
if i ==0{
vector_metrics.push(Box::new(Metric1 {}));
vector_update.push(Box::new(Metric1 {}));
}
else{
vector_metrics.push(Box::new(Metric2 {}));
vector_update.push(Box::new(Metric2 {}));
}
}
let col_vector : Vec<& mut dyn Metric> = Vec::new();
for met in vector_metrics{
col_vector.push(&mut *met)
}
let coll = collector{metrics:col_vector};
}