ExpertiDict

Rust · Avançado · Inglês · Técnico

PhantomData

/ˈfæntəm ˈdeɪtə/substantivo

Tipo de tamanho zero que informa ao compilador que uma struct se comporta como se contivesse um T, sem guardar nenhum dado de fato.

Onde usar

Usado em ids tipados, ponteiros brutos e typestate. Sem ele, um parâmetro genérico que a struct não usa gera erro de compilação.

Em código

use std::marker::PhantomData;
struct Id<T> {
  n: u32,
  _t: PhantomData<T>,
}
let id: Id<String> =
  Id { n: 1, _t: PhantomData };
println!("{}", id.n);

Exemplos

Add a PhantomData field for the unused type.

Adicione um campo PhantomData para o tipo não usado.

PhantomData makes the id type-safe.

O PhantomData torna o id seguro em relação aos tipos.

Cuidado

Não ocupa memória em execução, mas afeta variância, drop check e os traits Send e Sync da struct.

Origem

Do inglês phantom, 'fantasma': um dado que existe só para o compilador.

Veja também

Todos os termos de Rust