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.

# Function Templates

Pendalaman function template: beberapa parameter tipe, deduksi return type dengan auto, dan pratinjau spesialisasi eksplisit.

Buka →
# Class Templates

Bangun class generik dengan template: Kotak<T>, member function di dalam dan di luar class, instansiasi eksplisit, dan std::vector sebagai contoh klasik.

Buka →
# Template Parameters

Kenali tiga jenis parameter template: typename/class, default template argument, dan template template parameter.

Buka →
# Non-type Template Parameters

Parameter template tidak harus tipe: pelajari NTTP, dari std::array<int, 5> sampai auto NTTP dan konstanta constexpr.

Buka →
# Template Specialization

Berikan perilaku khusus untuk tipe tertentu: full specialization pada class template dan function template.

Buka →
# Partial Specialization

Spesialisasi sebagian: pola Kotak<T*>, spesialisasi member, dan alasan function template tidak mendukung partial specialization.

Buka →
# Variadic Templates

Template dengan jumlah argumen bebas: parameter pack, pack expansion, pola rekursi, dan sizeof...(Args).

Buka →
# Parameter Pack

Anatomi pack expansion: pola perluasan sederhana sampai pemanggilan fungsi, forwarding pack ke fungsi lain, dan emplace_back.

Buka →
# Fold Expressions

Empat bentuk fold expression C++17 untuk memproses parameter pack tanpa rekursi: penjumlahan, pencetakan, dan pengujian logika.

Buka →
# Type Traits

Periksa dan manipulasi tipe pada saat kompilasi: is_integral_v, is_pointer_v, remove_reference_t, decay_t, dan enable_if.

Buka →
# constexpr dan consteval Functions

Fungsi 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 →
# Concepts

Kendala template C++20: concept baku dan buatan, auto dengan concept, serta pesan error yang akhirnya menjelaskan diri sendiri.

Buka →
# requires Expressions

Menulis kendala ad-hoc dengan requires expression: mengecek keberadaan operasi, empat jenis requirement, dan pola requires requires.

Buka →
# Compile-time Constraints

static_assert dengan pesan sendiri, kendala pada class template, dan if constexpr untuk memilih perilaku per tipe — tanpa SFINAE manual.

Buka →
# Generic Programming Patterns

Pola-pola puncak kode generik: policy-based design, tag dispatch, CRTP, dan type erasure — plus kapan generik lebih tepat daripada OOP.

Buka →