ExpertiDict

C++ · Avançado · Inglês · Técnico

type erasure

taɪp ɪˈɹeɪ.ʒɚsubstantivo

Técnica que esconde o tipo concreto atrás de uma interface uniforme, combinando template e herança interna. É o que deixa std::function e std::any guardarem tipos diferentes.

Onde usar

Usada para oferecer polimorfismo por valor sem exigir que os tipos herdem de uma base comum. Custa uma indireção e, às vezes, uma alocação no heap.

Em código

struct Obj {
  template <class T>
  Obj(T t) : f_([t] { std::cout << t; }) {}
  void mostrar() const { f_(); }
  std::function<void()> f_;
};
Obj a(42), b(std::string("oi"));
a.mostrar(); b.mostrar();

Exemplos

std function uses type erasure to store any callable.

std function usa type erasure para guardar qualquer chamável.

We wrapped each shape in a type erasure class.

Embrulhamos cada forma em uma classe de type erasure.

Cuidado

Não é o mesmo mecanismo do type erasure de generics em Java; aqui é um padrão escrito explicitamente no código.

Sinônimos

apagamento de tipo

Veja também

Todos os termos de C++