Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menyimpan Penunjuk Fungsi Ahli dalam Objek `std::function` Generik?
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);
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);
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); };
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!