设计思路
- Container结构体:使用
Vec
来存储Item
,以便支持动态添加和移除。
- Item结构体:可以是不同类型,且可能持有不同生命周期的引用。
- 生命周期标注:确保
Container
和Item
中的引用生命周期正确,特别是在添加、移除和遍历操作时。
- 泛型:使用泛型来支持不同类型的
Item
。
代码实现
// 定义Item trait,所有的Item类型都要实现这个trait
trait ItemTrait {
fn perform_operation(&mut self);
}
// 定义Container结构体
struct Container<T: ItemTrait> {
items: Vec<T>,
}
impl<T: ItemTrait> Container<T> {
// 添加Item的方法
fn add_item(&mut self, item: T) {
self.items.push(item);
}
// 移除Item的方法
fn remove_item(&mut self, index: usize) {
if index < self.items.len() {
self.items.remove(index);
}
}
// 遍历所有Item并执行特定操作的方法
fn traverse_and_operate(&mut self) {
for item in &mut self.items {
item.perform_operation();
}
}
}
// 示例Item结构体
struct ExampleItem<'a> {
data: &'a mut i32,
}
impl<'a> ItemTrait for ExampleItem<'a> {
fn perform_operation(&mut self) {
*self.data += 1;
}
}
使用示例
fn main() {
let mut num = 10;
let mut container = Container { items: Vec::new() };
let item = ExampleItem { data: &mut num };
container.add_item(item);
container.traverse_and_operate();
println!("The value of num after operation: {}", num);
container.remove_item(0);
}