Template memungkinkan satu kode bekerja untuk banyak tipe tanpa duplikasi. Kita mempelajari function dan class template, variadic templates, concepts, requires, hingga type traits dan constexpr yang menegakkan kontrak saat kompilasi.
Pendalaman function template: beberapa parameter tipe, deduksi return type dengan auto, dan pratinjau spesialisasi eksplisit.
Buka → # Class TemplatesBangun class generik dengan template: Kotak<T>, member function di dalam dan di luar class, instansiasi eksplisit, dan std::vector sebagai contoh klasik.
Buka → # Template ParametersKenali tiga jenis parameter template: typename/class, default template argument, dan template template parameter.
Buka → # Non-type Template ParametersParameter template tidak harus tipe: pelajari NTTP, dari std::array<int, 5> sampai auto NTTP dan konstanta constexpr.
Buka → # Template SpecializationBerikan perilaku khusus untuk tipe tertentu: full specialization pada class template dan function template.
Buka → # Partial SpecializationSpesialisasi sebagian: pola Kotak<T*>, spesialisasi member, dan alasan function template tidak mendukung partial specialization.
Buka → # Variadic TemplatesTemplate dengan jumlah argumen bebas: parameter pack, pack expansion, pola rekursi, dan sizeof...(Args).
Buka → # Parameter PackAnatomi pack expansion: pola perluasan sederhana sampai pemanggilan fungsi, forwarding pack ke fungsi lain, dan emplace_back.
Buka → # Fold ExpressionsEmpat bentuk fold expression C++17 untuk memproses parameter pack tanpa rekursi: penjumlahan, pencetakan, dan pengujian logika.
Buka → # Type TraitsPeriksa dan manipulasi tipe pada saat kompilasi: is_integral_v, is_pointer_v, remove_reference_t, decay_t, dan enable_if.
Buka → # constexpr dan consteval FunctionsFungsi constexpr boleh dihitung compiler saat kompilasi dan fungsi consteval wajib dihitung saat kompilasi: pelajari aturan pemilihannya, bukti static_assert, serta std::vector dan algoritma constexpr di C++20/23.
Buka → # ConceptsKendala template C++20: concept baku dan buatan, auto dengan concept, serta pesan error yang akhirnya menjelaskan diri sendiri.
Buka → # requires ExpressionsMenulis kendala ad-hoc dengan requires expression: mengecek keberadaan operasi, empat jenis requirement, dan pola requires requires.
Buka → # Compile-time Constraintsstatic_assert dengan pesan sendiri, kendala pada class template, dan if constexpr untuk memilih perilaku per tipe — tanpa SFINAE manual.
Buka → # Generic Programming PatternsPola-pola puncak kode generik: policy-based design, tag dispatch, CRTP, dan type erasure — plus kapan generik lebih tepat daripada OOP.
Buka →