З різних порівнянь шаблонів C ++ та таких дженериків C # / Java, як цей,
Я зрозумів, що шаблони C ++ реалізуються за допомогою певної попередньої обробки (заміна простого тексту перед розбором), а не компіляція. Тому що перевірка типу в шаблонах C ++ нагадує макроси C. Я маю на увазі, якщо є деякі помилки, це помилки згенерованого коду після обробки шаблонів кодових блоків, а не від самих шаблонів. Іншими словами, вони є лише своєрідною верхньою версією макросів у С.
Потім я знайшов деякі інші факти, що підтверджують це -
Я подумав, якщо шаблони C ++ будуть реалізовані за допомогою попередньої обробки, виникнуть проблеми з динамічним посиланням (з використанням .dll). І швидкий гугл це підтримав.
Інший момент - цілі константи можна передавати як аргументи шаблонам. І навіть підтримує якусь рекурсію. Але ця рекурсія не знайдена у складеному складі / машинному коді. Управління рекурсією керує часом компіляції, генеруючи функції для кожного рекурсивного виклику і, таким чином, маючи більший, але швидший виконуваний двійковий файл.
Хоча на відміну від макросів C, він має деякі переважні здібності. Але чи не реалізований шаблон C ++ з якоюсь попередньою обробкою? Як це реалізується в різних компіляторах C ++?