C++ Call Function For Each Parameter Pack

4 min read Jul 05, 2024
C++ Call Function For Each Parameter Pack

Memanggil Fungsi untuk Setiap Parameter Pack di C++

Parameter pack merupakan fitur C++ yang memungkinkan kita untuk membuat fungsi yang dapat menerima jumlah argumen yang tidak tetap. Untuk memanggil fungsi untuk setiap parameter pack, kita dapat menggunakan beberapa teknik, seperti:

1. Menggunakan std::apply

std::apply merupakan fungsi template yang mengambil tuple dan memanggil fungsi dengan elemen tuple sebagai argumen. Kita dapat menggunakan std::apply dengan std::make_tuple untuk membuat tuple dari parameter pack dan memanggil fungsi dengan tuple tersebut.

#include 
#include 

void print(int a, int b, int c) {
  std::cout << a << " " << b << " " << c << std::endl;
}

template
void call_function(Args&&... args) {
  std::apply(print, std::make_tuple(std::forward(args)...));
}

int main() {
  call_function(1, 2, 3); // Output: 1 2 3
  return 0;
}

2. Menggunakan Variadic Template

Kita dapat menggunakan variadic template untuk memanggil fungsi untuk setiap parameter pack dengan rekursi.

#include 

void print(int a) {
  std::cout << a << " ";
}

template
void call_function(T&& head, Args&&... args) {
  print(std::forward(head));
  call_function(std::forward(args)...);
}

template<>
void call_function() {
  // Do nothing
}

int main() {
  call_function(1, 2, 3); // Output: 1 2 3 
  return 0;
}

3. Menggunakan std::initializer_list

Kita dapat menggunakan std::initializer_list untuk menerima parameter pack sebagai daftar terinisialisasi. Kemudian, kita dapat melakukan iterasi melalui daftar dan memanggil fungsi untuk setiap elemen.

#include 
#include 

void print(int a) {
  std::cout << a << " ";
}

void call_function(std::initializer_list args) {
  for (auto arg : args) {
    print(arg);
  }
}

int main() {
  call_function({1, 2, 3}); // Output: 1 2 3 
  return 0;
}

4. Menggunakan for_each

Kita dapat menggunakan for_each dari algorithm library untuk memanggil fungsi untuk setiap parameter pack.

#include 
#include 

void print(int a) {
  std::cout << a << " ";
}

template
void call_function(Args&&... args) {
  std::initializer_list list = { std::forward(args)... };
  std::for_each(list.begin(), list.end(), print);
}

int main() {
  call_function(1, 2, 3); // Output: 1 2 3
  return 0;
}

Kesimpulan

Memanggil fungsi untuk setiap parameter pack di C++ dapat dilakukan dengan beberapa teknik. Pilih teknik yang paling sesuai dengan kebutuhan dan konteks Anda.

Featured Posts