我正在浏览一些库,我注意到包含幻像生命周期字段的结构的用法,例如
struct S<'a> {
s: i32,
_lifetime: PhantomData<&'a ()> // NOTE: there's no generic type here!
}
我很好奇知道幻影生命的重要性-它为S
提供了什么优势,如果没有它,将无法或不方便处理?
答案 0 :(得分:3)
这与对泛型类型使用%20
相同:即使编译器在结构定义中看不到引用,也使结构像包含引用一样起作用。
使用此参数的一个重要原因是在处理FFI类型时代表相关的生命周期,但是在希望获得生命周期提供的保护但实际上没有任何参考的任何时候它都是有用的。 / p>
另请参阅:
PhantomData
in the Nomicon。这讨论了使用<a href="mailto:someone@example.com?subject=Hello%20there&body=Body%20stuff%20goes%20here.%0D%0DMailed%20from%20yoursite.com">Send Mail</a>
的各种常见模式。