Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Bebankan `operator()` dalam C ? Fungsi dan Kuasa Pengaturcaraan Generik

Mengapa Bebankan `operator()` dalam C ? Fungsi dan Kuasa Pengaturcaraan Generik

Barbara Streisand
Barbara Streisandasal
2024-11-11 07:01:03835semak imbas

Why Overload the `operator()` in C  ? Functors and the Power of Generic Programming

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn