Meneroka Operator() Lebih Muatan dalam C : Fungsi dan Pengaturcaraan Generik
Melebihi beban operator () dalam C , seperti yang dilihat dalam Isyarat Boost perpustakaan, menimbulkan persoalan tentang tujuan dan konvensionalnya. Mari kita selidiki sebab di sebalik amalan ini.
Functors: Merapatkan Fungsi dan Dunia Objek
Operator() overloading memainkan peranan penting dalam mencipta functors, satu binaan unik yang menggabungkan tingkah laku seperti fungsi dengan statefulness. Fungsi mengekalkan keadaan dalaman mereka di antara panggilan, membolehkan mereka mengingati operasi lepas.
Contoh Fungsi
Pertimbangkan fungsi Accumulator berikut:
struct Accumulator { int counter = 0; int operator()(int i) { return counter += i; } };
Pengaturcaraan Generik: Memalamkan Anda Logik
Fungsi mencari aplikasi yang luas dalam pengaturcaraan generik, di mana algoritma beroperasi pada julat elemen menggunakan fungsi atau functor yang dibekalkan pengguna. Fleksibiliti ini ditunjukkan dalam algoritma std::for_each:
template <typename InputIterator, typename Functor> void for_each(InputIterator first, InputIterator last, Functor f) { while (first != last) f(*first++); }
Kemudahan Operator()
Lebihan operator() membenarkan kedua-dua functors dan penunjuk fungsi untuk memasukkan algoritma generik. Sebagai contoh, pertimbangkan contoh ini:
void print(int i) { std::cout << i << std::endl; } ... std::vector<int> vec; // Fill vec // Using a functor Accumulator acc; std::for_each(vec.begin(), vec.end(), acc); // acc.counter contains the vector sum // Using a function pointer std::for_each(vec.begin(), vec.end(), print); // prints all elements
Berbilang () Operator: Kemungkinan
Bertentangan dengan kepercayaan popular, adalah mungkin untuk melebihkan operator() berbilang kali dalam satu kelas. Mematuhi peraturan lebihan beban kaedah, jenis pemulangan mesti berbeza.
Atas ialah kandungan terperinci Mengapa Bebankan `operator()` dalam C ? Fungsi dan Kuasa Pengaturcaraan Generik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!