Z różnych porównań szablonów C ++ i generycznych C # / Java takich jak ten -
Mam wrażenie, że szablony C ++ są implementowane przez pewnego rodzaju przetwarzanie wstępne (zamiana zwykłego tekstu przed parsowaniem), a nie kompilowanie. Ponieważ sprawdzanie typu w szablonach C ++ przypomina makra C. Mam na myśli, że jeśli są jakieś błędy, są to błędy wygenerowanego kodu po przetworzeniu bloków szablonów, a nie samych szablonów. Innymi słowy, są one tylko rodzajem wyższej wersji makr w C.
Potem znalazłem kilka innych faktów na poparcie tego-
Pomyślałem, że jeśli szablony C ++ są implementowane przez przetwarzanie wstępne, pojawią się problemy z dynamicznym łączeniem (przy użyciu .dll). Wspierało to szybkie google.
Inną kwestią jest to, że stałe liczb całkowitych mogą być przekazywane jako argumenty do szablonów. I obsługuje nawet pewnego rodzaju rekurencję. Ale ta rekurencja nie występuje w skompilowanym kodzie zestawu / maszyny. Elementem rekurencyjnym zarządza się w czasie kompilacji, generując funkcje dla każdego wywołania rekurencyjnego, a tym samym posiadając większy, ale szybszy plik wykonywalny.
Chociaż w przeciwieństwie do makr C, ma pewne lepsze umiejętności. Ale czy szablon C ++ nie jest implementowany z jakimś rodzajem przetwarzania wstępnego? Jak to jest zaimplementowane w różnych kompilatorach C ++?