0Pricing
C++ Academy · Pelajaran

Template Variadik dan Paket Parameter

Gunakan paket parameter dan ekspresi fold untuk menulis template variadik

Template Variadik dan Paket Parameter adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.

Jumlah Argumen Templat yang Berubah-ubah

Templat variadik menerima jumlah argumen templat berapa pun. Templat ini digunakan untuk menulis fungsi seperti std::make_unique, std::tuple, dan pencatatan bergaya pencetakan berformat.

Sintaks Paket Parameter

Gunakan typename... Ts untuk mendeklarasikan paket parameter tipe, dan Ts... untuk mengembangkannya.

template <typename... Args>
void print_all(Args... args) {
    // ...
}

Ekspansi Paket

Notasi ... setelah ekspresi mengembangkan paket menjadi daftar yang dipisahkan koma.

template <typename... Args>
void pass_through(Args... args) {
    other_func(args...);    // pass each arg
}

Templat Variadik Rekursif (Gaya Lama)

Sebelum C++17, fungsi variadik biasanya ditulis secara rekursif — proses satu argumen, lalu lakukan rekursi dengan sisanya.

// base case
void log() {}

// recursive case
template <typename T, typename... Rest>
void log(T first, Rest... rest) {
    std::cout << first;
    log(rest...);
}

Ekspresi Pelipatan (C++17)

C++17 menambahkan ekspresi pelipatan — jauh lebih bersih daripada rekursi. Terapkan operator pada seluruh paket.

template <typename... Args>
auto sum(Args... args) {
    return (args + ...);    // fold +
}

std::cout << sum(1, 2, 3, 4);   // 10

Operator Pelipatan

Empat bentuk pelipatan:

  • (... op pack) — pelipatan kiri atas ekspansi uner
  • (pack op ...) — pelipatan kanan
  • (init op ... op pack) — pelipatan kiri dengan nilai awal
  • (pack op ... op init) — pelipatan kanan dengan nilai awal

Mencetak Semua Argumen

Idiom umum dengan pelipatan koma.

template <typename... Args>
void print_all(Args... args) {
    ((std::cout << args << " "), ...);   // comma fold
}

print_all(1, "hi", 3.14);   // 1 hi 3.14

Menghitung Argumen

sizeof...(pack) mengembalikan jumlah item dalam paket pada waktu kompilasi.

template <typename... Args>
void info(Args... args) {
    std::cout << "count = " << sizeof...(args);
}

Templat Kelas Variadik

Templat kelas juga dapat memiliki paket parameter. Contoh: std::tuple<Ts...>.

template <typename... Ts>
class Tuple {
    // implementation uses recursion or storage tricks
};

Penerusan Sempurna dengan Paket

Gabungkan templat variadik dengan std::forward untuk meneruskan argumen apa pun secara sempurna ke konstruktor.

template <typename T, typename... Args>
std::unique_ptr<T> my_make_unique(Args&&... args) {
    return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}

Manipulasi Paket Tipe

Dengan spesialisasi templat atau ekspresi pelipatan, Anda dapat menerapkan operasi daftar pada waktu kompilasi: elemen pertama, elemen terakhir, serta pemisahan kepala dan ekor.

Jebakan

Masalah umum:

  • Lupa mengembangkan paket (args vs args...)
  • Urutan evaluasi dalam ekspresi pelipatan (kiri dan kanan penting untuk operator non-asosiatif)
  • Waktu kompilasi meningkat akibat rekursi yang mendalam

Pemeriksaan Singkat

Fitur C++17 apa yang menyederhanakan penjumlahan semua elemen dalam paket parameter?

Ringkasan

Templat variadik menangani jumlah argumen templat yang berubah-ubah melalui paket parameter. Ekspresi pelipatan C++17 menggantikan kode variadik rekursif dengan ekspresi yang ringkas. Jika digabungkan dengan penerusan sempurna, fitur-fitur ini mendukung fungsi pembuat dan pemilihan pemanggilan generik.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Template Variadik dan Paket Parameter” gratis?

Ya — teks lengkap “Template Variadik dan Paket Parameter” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Template Variadik dan Paket Parameter”?

Gunakan paket parameter dan ekspresi fold untuk menulis template variadik Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C++ Academy?

Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Template Variadik dan Paket Parameter” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?

Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Meninjau Kembali Template Fungsi dan Class
  2. Spesialisasi Template Parsial dan Penuh
  3. Template Variadik dan Paket Parameter
  4. Fungsi constexpr dan if constexpr
← Kembali ke C++ Academy