C++ · Avançado · Inglês · Técnico
type erasure
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