Type erasure
Стирание типа
Назначение
Идиома type erasure позволяет работать с объектами разных типов, скрывая их реальный тип при помощи абстрактного интерфейса.
"Стирание типа" позволяет описать общую концепцию, которую могут реализовывать объекты различных типов, при этом скрывая от пользователя конкретный тип объекта.
Решаемые задачи
необходимость работать с объектами разных типов, но при этом обеспечить единый интерфейс и скрыть от пользователя реальный тип объекта
C++ - это статически типизированный язык. В языках со статической типизацией тип объекта известен и устанавливается во время компиляции. В то время как в языках с динамической типизацией тип связан со значениями времени выполнения. Механизм, осуществляемый идиомой type erasure позволяет преодолеть это ограничение и предоставляет возможность реализовать функции, существующие в языках с динамической типизацией.
Различные методы реализации "Стирания типа"
Стирание типа, используя void*
Недостаток: небезопасно и для каждого типа требуется отдельная функция сравнения
Стирание типа с использованием шаблонов C++
Недостаток: может привести к появлению множества экземпляров шаблона функции и увеличению времени компиляции
Стирание типа с использованием полиморфизма
Недостаток: затраты времени выполнения
Стирание типа с помощью объединения
Недостаток: не является типобезопасным
Last updated
Was this helpful?