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.