Rumah >pembangunan bahagian belakang >C++ >Bagaimana Menggunakan Penunjuk Fungsi Ahli dengan betul dengan fungsi std::?
Cara Mengendalikan Penunjuk Fungsi Ahli dalam Objek std::function
Apabila bekerja dengan fungsi ahli dalam objek std::fungsi, komplikasi tertentu boleh timbul. Pertimbangkan kod berikut:
#include <functional> class Foo { public: void doSomething() {} void bindFunction() { // ERROR std::function<void(void)> f = &Foo::doSomething; } };
Ralat timbul kerana fungsi ahli bukan statik secara tersirat menghantar penunjuk "ini" sebagai hujah. Walau bagaimanapun, tandatangan std::function di sini tidak mengambil kira hujah ini.
Penyelesaian: Mengikat Fungsi Ahli kepada std::function Objects
Untuk menangani isu ini, hujah pertama ("ini") mesti terikat secara eksplisit:
std::function<void(void)> f = std::bind(&Foo::doSomething, this);
Untuk fungsi dengan parameter, ruang letak boleh digunakan:
using namespace std::placeholders; std::function<void(int, int)> f = std::bind(&Foo::doSomethingArgs, this, _1, _2);
Dalam C 11, lambdas juga boleh digunakan:
std::function<void(int, int)> f = [=](int a, int b) { this->doSomethingArgs(a, b); };
Dengan menggabungkan teknik ini, pengaturcara boleh berjaya bekerja dengan penunjuk fungsi ahli dalam std:: objek fungsi, menguruskan hujah "ini" tersirat dengan berkesan.
Atas ialah kandungan terperinci Bagaimana Menggunakan Penunjuk Fungsi Ahli dengan betul dengan fungsi std::?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!