Mengapa Bebankan `operator()` dalam C ?

Mary-Kate Olsen
Lepaskan: 2024-11-11 04:28:02
asal
829 orang telah melayarinya

Why Overload the `operator()` in C  ?

Melebihi beban operator() dalam C : Membongkar Kerumitan

Di alam C , amalan melebihkan operator() adalah lazim, terutamanya dalam konteks yang melibatkan panggilan balik. Pendekatan yang kelihatan tidak konvensional ini telah mendapat perhatian daripada pihak tertentu. Mari kita mendalami rasional di sebalik pilihan reka bentuk ini.

Melebihi beban operator() memenuhi tujuan utama mencipta functors—objek stateful yang berkelakuan serupa dengan fungsi tetapi mempunyai keupayaan tambahan untuk mengekalkan data dalaman antara seruan. Pertimbangkan contoh functor berikut:

struct Accumulator {
    int counter = 0;
    int operator()(int i) { return counter += i; }
};
...
Accumulator acc;
cout << acc(10) << endl; //prints "10"
cout << acc(20) << endl; //prints "30"
Salin selepas log masuk

Di sini, functor Accumulator mengumpul nilai, mencerminkan keadaannya melalui seruan operator().

Functors memainkan peranan penting dalam pengaturcaraan generik, di mana Algoritma STL direka bentuk untuk berfungsi dengan fungsi atau fungsi yang disediakan pengguna. Sebagai contoh, algoritma std::for_each menggunakan operasi yang diberikan kepada setiap elemen dalam julat:

template <typename InputIterator, typename Functor>
void for_each(InputIterator first, InputIterator last, Functor f) {
    while (first != last) f(*first++);
}
Salin selepas log masuk

Algoritma ini menerima sama ada penunjuk fungsi atau functors melalui parameter f, membolehkan penyesuaian serba boleh.

Walaupun operator() memang boleh terlebih beban, ia mematuhi peraturan kaedah terlebih muatan. Ini bermakna berbilang beban lampau mesti berbeza dalam jenis pemulangan atau senarai parameter.

Atas ialah kandungan terperinci Mengapa Bebankan `operator()` dalam C ?. 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