Из разных сравнений среди шаблонов C ++ и C # / обобщений Java, как этот
У меня сложилось впечатление, что шаблоны C ++ реализуются с помощью некоторой предварительной обработки (замена простого текста перед синтаксическим анализом), а не компиляции. Потому что проверка типов в шаблонах C ++ напоминает макросы C. Я имею в виду, что если есть какие-то ошибки, это ошибки в сгенерированном коде после обработки шаблонных блоков кода, а не в самих шаблонах. Другими словами, они являются своего рода верхней версией макросов в C.
Затем я нашел некоторые другие факты, подтверждающие это
Я думал, что если шаблоны C ++ будут реализованы с помощью предварительной обработки, возникнут проблемы с динамическим связыванием (с использованием .dll). И быстрый поиск в Google поддержал это.
Другое дело, что целочисленные константы могут быть переданы в качестве аргументов шаблонам. И это даже поддерживает какую-то рекурсию. Но эта рекурсия не найдена в скомпилированной сборке / машинном коде. Управление рекурсией осуществляется во время компиляции путем генерации функций для каждого рекурсивного вызова и, таким образом, получения большего, но более быстрого исполняемого двоичного файла.
Хотя в отличие от макросов C, он обладает некоторыми превосходными возможностями. Но разве шаблон C ++ не реализован с какой-то предварительной обработкой? Как это реализовано в разных компиляторах C ++?