PantomData

2024-05-26

最后编辑于:2024-06-25

    #Rust

在编写结构体时,有时类型或生命周期在逻辑上与一个结构体关联起来了,但是却不属于其结构体的任何一个成员

PantomData不占空间,只是为了通过静态检查,模拟一个给定了类型的字段

| Pantom类型 | 'a | 'T | | | :------------------------ | :--: | :--: | --- | | PhantomData<T> | - | 协变 | | | PhantomData<&'a T> | 协变 | 协变 | | | PantomData<&'a mut T> | 协变 | 不变 | | | PantomData<*const T> | - | 协变 | | | PantomData<*mut T> | - | 不变 | | | PantomData<fn(T)> | - | 逆变 | | | PantomData<fn() -> T> | - | 协变 | | | PantomData<fn(T) -> T> | - | 不变 | | | PantomData<Cell<&'a ()>> | 不变 | - | |

https://learnku.com/docs/nomicon/2018/310-phantom-data/4721