Sari la conținutul principal

Templates

Programarea generică în C++ se bazează pe ceea ce numim monomorfizare (monomorphization), un termen adoptat din comunitatea Rust.

Monomorfizarea este un procedeu simplu prin care clasele sau funcțiile generice, adică template-urile, sunt implementate la compile-time pentru fiecare parametrizare specifică prin substituirea literară a parametrilor template-ului cu tipurile și valorile date.

Monomorfizarea este una dintre cele trei posibile implementări ale genericității în limbajele de programare, celelalte fiind reificare și type erasure. Dezavantajul major al acestei implementări este că nu permite crearea de noi tipuri de date la runtime. Cu toate acestea, în comparație cu celelalte două, monomorfizarea are avantajul de a produce cod compilat mai bine optimizat și nu suferă de aceleași limitări.

În această secțiune, vom explora cum putem exprima concepte foarte abstracte cu ajutorul template-urilor din C++ și cum putem aplica restricții asupra acestora folosind concepts din C++20 ca predicate la compile-time.