Dari perbandingan yang berbeda antara templat C ++ dan C # / Java generics seperti ini-
Saya mendapat persepsi bahwa, template C ++ diimplementasikan oleh beberapa jenis preprocessing (penggantian teks biasa sebelum parsing), bukan kompilasi. Karena tipe yang memeriksa templat C ++ menyerupai makro C. Maksud saya, jika ada beberapa kesalahan, itu adalah kesalahan dari kode yang dihasilkan setelah memproses blok kode templated, bukan dari template itu sendiri. Dengan kata lain, mereka hanyalah sejenis makro versi atas di C.
Kemudian saya menemukan beberapa fakta lain yang mendukung ini-
Saya pikir, jika template C ++ diimplementasikan oleh preprocessing, akan ada masalah dengan tautan dinamis (menggunakan .dll). Dan googling cepat mendukung ini.
Poin lainnya adalah, konstanta integer dapat dikirimkan sebagai argumen ke template. Dan itu bahkan mendukung semacam rekursi. Tetapi rekursi ini tidak ditemukan dalam kode perakitan / mesin yang dikompilasi. Hal rekursi dikelola dalam waktu kompilasi dengan menghasilkan fungsi untuk setiap panggilan rekursif dan dengan demikian memiliki biner yang lebih besar tetapi lebih cepat dieksekusi.
Meskipun tidak seperti makro C, ia memiliki beberapa kemampuan superior. Tapi bukankah template C ++ diimplementasikan dengan semacam preprocessing? Bagaimana ini diimplementasikan dalam kompiler C ++ yang berbeda?