// 定义结构体 StructA
struct StructA<'a> {
data: &'a i32,
}
// 定义结构体 StructB
struct StructB<'b> {
data: &'b String,
}
// 泛型函数 process_data,正确标注生命周期参数
fn process_data<'a, 'b>(a: StructA<'a>, b: StructB<'b>) {
println!("StructA data: {}", a.data);
println!("StructB data: {}", b.data);
}
fn main() {
let num = 42;
let str_val = String::from("Hello, Rust");
let struct_a = StructA { data: &num };
let struct_b = StructB { data: &str_val };
process_data(struct_a, struct_b);
}
- 结构体定义:
StructA
和 StructB
分别定义了不同类型的引用成员,并且使用了不同的生命周期参数 'a
和 'b
。
- 泛型函数设计:
process_data
函数接受 StructA<'a>
和 StructB<'b>
类型的参数,函数内部只是简单地打印结构体中的数据,展示如何对不同生命周期引用进行操作。
- 在函数签名中明确声明了两个生命周期参数
'a
和 'b
,这使得函数可以接受具有不同生命周期的结构体实例。
- 代码实现:
- 在
main
函数中,创建了 StructA
和 StructB
的实例,并调用 process_data
函数传递这些实例。由于生命周期标注正确,代码可以顺利编译和运行。