marker::PhantomData 类

使用 PhantomData<T>, 用于处理编译期生命周期的问题, PhantomData<T> 本身不占用内存. 以下示例中, 结构体 S 的大小跟 i32 是一致的:

use std::marker::PhantomData;
use std::mem::size_of_val;

struct S<A, B> {
    first: A,
    phantom: PhantomData<B>,
}

fn main() {
    let s: S<char, f64> = S {
        first: 'a',
        phantom: PhantomData,
    };

    println!("size of s: {}", size_of_val(&s));
}