Преимущества дженериков в C++ по сравнению с шаблонами:
- Обобщения можно предоставлять в совместно используемых библиотеках. 1 Их можно использовать без доступа к исходному коду и обновлять без необходимости перекомпиляции всех программ, которые их используют. 1
- Для поддержки различных экземпляров требуется только одна версия кода. 1 Это сокращает размер кода. 1
- Компилятору не нужно знать типы параметров для компиляции. 1 Обычно это приводит к появлению чётких сообщений об ошибках, соответствующих местоположению. 1
Недостатки дженериков в C++ по сравнению с шаблонами:
- Универсальные классы довольно негибки. 1 Они хорошо работают для типов, похожих на коллекции, но с трудом адаптируются к другим применениям. 1
- При работе с базовыми типами возникает проблема эффективности. 1 Дженерики работают только с типами объектов, поэтому все базовые типы необходимо упаковывать и распаковывать. 1 Это оказывает прямое влияние на скорость, а также создаёт гораздо больше объектов для управления. 1
- Массивы плохо сочетаются с дженериками. 3 Например, нельзя создать обобщённый массив вида new E[]. 3