Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menyimpan Penunjuk Fungsi Ahli dalam Objek `std::function` Generik?

Bagaimana untuk Menyimpan Penunjuk Fungsi Ahli dalam Objek `std::function` Generik?

Linda Hamilton
Lepaskan: 2024-12-23 20:39:10
asal
352 orang telah melayarinya

How to Store Member Function Pointers in Generic `std::function` Objects?

Menyimpan Penunjuk Fungsi Ahli dalam Objek Generik std::function

Apabila cuba menyimpan penunjuk fungsi ahli kelas tertentu dalam peta menggunakan std::function objects, pembangun mungkin menghadapi ralat: "term does not evaluate to a function taking 0 arguments." Ralat ini timbul apabila menugaskan penuding fungsi ahli terus kepada objek std::function.

Inti isu terletak pada fakta bahawa fungsi ahli bukan statik memerlukan penuding "ini" tersirat sebagai hujah pertama . Untuk membetulkan ini, hujah pertama mesti terikat secara eksplisit.

Penyelesaian:

std::function<void(void)> f = std::bind(&Foo::doSomething, this);
Salin selepas log masuk

Pendekatan ini secara berkesan mengikat penunjuk "ini" sebagai hujah pertama, membenarkan objek std::function untuk menangkap fungsi ahli dengan betul.

Fungsi Pengendalian dengan Parameter:

Untuk fungsi ahli dengan parameter, ruang letak mesti dinyatakan untuk menunjukkan kedudukan argumen terikat.

using namespace std::placeholders;
std::function<void(int, int)> f = std::bind(&Foo::doSomethingArgs,
                                                 this,
                                                 std::placeholders::_1,
                                                 std::placeholders::_2);
Salin selepas log masuk

C 11 Lambda Syntax:

Jika pengkompil menyokong C 11 lambdas, pendekatan yang lebih ringkas boleh digunakan:

std::function<void(int, int)> f = [=](int a, int b) {
    this->doSomethingArgs(a, b);
};
Salin selepas log masuk

Dengan mengikuti teknik ini, pembangun boleh menyimpan dan menggunakan penunjuk fungsi ahli dengan berkesan menggunakan objek std::fungsi generik.

Atas ialah kandungan terperinci Bagaimana untuk Menyimpan Penunjuk Fungsi Ahli dalam Objek `std::function` Generik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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