Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah `std::function` dan `std::bind` C 11 Boleh Menyelesaikan Cabaran Panggilan Balik Kelas Heterogen?

Bagaimanakah `std::function` dan `std::bind` C 11 Boleh Menyelesaikan Cabaran Panggilan Balik Kelas Heterogen?

Mary-Kate Olsen
Lepaskan: 2024-12-15 22:18:17
asal
624 orang telah melayarinya

How Can C  11's `std::function` and `std::bind` Solve Heterogeneous Class Callback Challenges?

Melalui Panggilan Balik Antara Kelas Heterogen

Dalam C , menentukan panggilan balik yang boleh dikongsi antara pelbagai kelas boleh menimbulkan cabaran. Walaupun menyediakan fungsi ahli statik dan menghantar penuding kepada contoh kelas adalah pendekatan biasa, ia mengehadkan fleksibiliti. Begini cara untuk menangani isu ini menggunakan std::function dan std::bind C 11:

Refactoring EventHandler

Daripada kaedah statik dan petunjuk contoh, refactor EventHandler untuk menerima std::function:

class EventHandler {
public:
    void addHandler(std::function<void(int)> callback) {
        // ... (as above)
    }
};
Salin selepas log masuk

Fungsi ini menerima "objek fungsi" yang mengambil hujah integer dan tidak mengembalikan apa-apa.

Menyesuaikan MyClass

Ubah suai MyClass untuk mengalih keluar kata kunci statik daripada Panggil Balik dan sebaliknya memberikan hujah:

class MyClass {
public:
    void Callback(int x);
    // ...
};

MyClass::Callback(int x) {
    // ... (as above)
}
Salin selepas log masuk

Untuk mengikat Panggil Balik ke EventHandler, gunakan std::bind:

handler->addHandler(std::bind(&MyClass::Callback, this, std::placeholders::_1));
Salin selepas log masuk

Pemegang tempat _1 mewakili hujah tunggal.

Fungsi Kendiri dan Ungkapan Lambda

Anda boleh menggunakan fungsi kendiri terus dalam addHandler:

void freeStandingCallback(int x) {
    // ...
}

handler->addHandler(freeStandingCallback);
Salin selepas log masuk

Selain itu, ungkapan lambda C 11 boleh digunakan dalam addHandler:

handler->addHandler([](int x) { std::cout << "x is " << x << '\n'; });
Salin selepas log masuk

Kesimpulan

Dengan menggaji std::function dan std::bind, panggilan balik boleh dihantar dengan lancar antara kelas heterogen, memberikan fleksibiliti dan kebolehgunaan semula kod.

Atas ialah kandungan terperinci Bagaimanakah `std::function` dan `std::bind` C 11 Boleh Menyelesaikan Cabaran Panggilan Balik Kelas Heterogen?. 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