Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah `std::function` Mencapai Kebolehpanggil Serbaguna dengan Saiz Konsisten?

Bagaimanakah `std::function` Mencapai Kebolehpanggil Serbaguna dengan Saiz Konsisten?

Susan Sarandon
Lepaskan: 2024-12-02 11:49:14
asal
496 orang telah melayarinya

How Does `std::function` Achieve Versatile Callability with Consistent Size?

Melaksanakan std::function untuk Kebolehpanggil Serbaguna

Fungsi std:: menyediakan cara untuk merangkum dan menyimpan sebarang jenis boleh panggil sambil mengekalkan saiz tetap. Walaupun saiz kandungannya yang berbeza-beza, seperti ungkapan lambda, fungsi std::mencapai ketekalan ini melalui teknik yang dikenali sebagai pemadaman jenis.

Pemadaman Jenis untuk Boleh Dipanggil Pelbagai

Pemadaman jenis melibatkan penciptaan antara muka biasa yang diwakili oleh kelas asas. Dalam kes std::function, kelas callable_base mentakrifkan operator fungsi maya() yang dilaksanakan oleh kelas terbitan untuk jenis boleh panggil tertentu. Pendekatan ini membolehkan std::function menyimpan penuding ke kelas asas, membenarkan ia membalut mana-mana boleh dipanggil.

Oleh kerana setiap boleh dipanggil mungkin mempunyai pelaksanaan yang berbeza, kelas terbitan dicipta secara dinamik dengan std::function mengurus peruntukan dalam timbunan.

Salin Gelagat dan Dalaman Nyatakan

Apabila menyalin fungsi std::, entiti boleh panggil dalaman disalin, bukannya dikongsi. Tingkah laku ini terbukti dalam ujian berikut:

int main() {
  int value = 5;
  typedef std::function<void()> fun;
  fun f1 = [=]() mutable { std::cout << value++ << '\n'; };
  fun f2 = f1;
  f1();                    // prints 5
  fun f3 = f1;
  f2();                    // prints 5
  f3();                    // prints 6 (copy after first increment)
}
Salin selepas log masuk

Kenaikan selepas panggilan pertama ke f1 tidak menjejaskan f2, yang menunjukkan bahawa f2 mempunyai salinan entiti boleh panggil sendiri.

Atas ialah kandungan terperinci Bagaimanakah `std::function` Mencapai Kebolehpanggil Serbaguna dengan Saiz Konsisten?. 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