Rust 生命周期系统在复杂泛型场景下需要更高级的工具,高阶 trait 约束(HRTB)与 PhantomData 是其中两个重要机制。
一、高阶 trait 约束(HRTB)
rust
fn apply<F>(f: F)
where
F: for<'a> Fn(&'a str) -> &'a str,
{
let s = String::from("hello");
let result = f(&s);
println!("{}", result);
}for<'a> 表示对任意生命周期都成立,常用于闭包与 trait 对象场景,避免生命周期被过早固定。
二、PhantomData 的用途
rust
use std::marker::PhantomData;
struct Tagged<T> {
value: u64,
_marker: PhantomData<T>,
}PhantomData<T> 不占用运行时空间,但向编译器声明该结构体“拥有”类型 T,用于表达所有权、生命周期约束与型变(Variance)关系。