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

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

Barbara Streisand
Lepaskan: 2024-11-11 07:01:03
asal
847 orang telah melayarinya

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; }
};
Salin selepas log masuk

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++);
}
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan