Menyimpan Penunjuk Fungsi Ahli dalam std::function Map untuk Kelas Tunggal
Apabila cuba menyimpan penunjuk fungsi kepada fungsi ahli bagi sesuatu kelas dalam peta fungsi std::, adalah penting untuk memahami keperluan untuk fungsi ahli bukan statik dipanggil dengan objek.
Dalam kod yang disediakan, ralat berpunca daripada tandatangan fungsi std::function
Coretan kod yang diperbetulkan ialah:
#include <functional> class Foo { public: void doSomething() {} void bindFunction() { // Correct std::function<void(Foo*)> f = &Foo::doSomething; } };
Untuk mengikat fungsi dengan parameter lagi, ruang letak C atau lambda C 11 boleh digunakan. Berikut ialah contoh untuk pendekatan ini:
Menggunakan Pemegang Tempat:
using namespace std::placeholders; std::function<void(Foo*, int, int)> f = std::bind(&Foo::doSomethingArgs, this, _1, _2);
Menggunakan Lambdas (C 11):
std::function<void(Foo*, int, int)> f = [=](Foo* foo, int a, int b) { foo->doSomethingArgs(a, b); };
Atas ialah kandungan terperinci Bagaimana untuk Menyimpan Penunjuk Fungsi Ahli dengan betul dalam Peta `std::function`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!