Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menyimpan Penunjuk Fungsi Ahli dalam Objek Fungsi Perpustakaan Standard?

Bagaimana untuk Menyimpan Penunjuk Fungsi Ahli dalam Objek Fungsi Perpustakaan Standard?

Linda Hamilton
Lepaskan: 2024-12-22 21:20:11
asal
925 orang telah melayarinya

How to Store Member Function Pointers in Standard Library Function Objects?

Penunjuk Fungsi kepada Fungsi Ahli dengan Fungsi Perpustakaan Standard

Dalam percubaan untuk menyimpan penunjuk fungsi kepada fungsi ahli kelas dalam peta yang mengandungi objek fungsi perpustakaan standard, ralat biasa timbul. Seperti yang ditunjukkan dalam kod di bawah, memberikan fungsi ahli secara langsung kepada objek fungsi mengakibatkan ralat:

#include <functional>

class Foo {
public:
    void doSomething() {}
    void bindFunction() {
        // ERROR
        std::function<void(void)> f = &Foo::doSomething;
    }
};
Salin selepas log masuk

Ralat yang dihadapi adalah disebabkan oleh keperluan tersirat fungsi ahli untuk objek. Fungsi ahli sentiasa dipanggil dengan objek, dengan berkesan menghantar penuding "ini" sebagai hujah pertamanya.

Untuk menyelesaikan isu ini, tandatangan fungsi mesti menyatakan bahawa fungsi itu tidak mengambil sebarang hujah (< void(void)>). Selain itu, hujah pertama (dan sahaja) mesti terikat. Ini boleh dicapai menggunakan std::bind():

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

Jika fungsi memerlukan parameter, ruang letak boleh digunakan:

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 juga boleh digunakan:

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

Atas ialah kandungan terperinci Bagaimana untuk Menyimpan Penunjuk Fungsi Ahli dalam Objek Fungsi Perpustakaan Standard?. 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