Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mencapai Fungsi seperti Refleksi dalam C Menggunakan std::map?

Bagaimana untuk Mencapai Fungsi seperti Refleksi dalam C Menggunakan std::map?

DDD
Lepaskan: 2024-10-27 01:22:30
asal
1040 orang telah melayarinya

How to Achieve Reflection-like Functionality in C   Using std::map?

Cara Memanggil Fungsi dengan Namanya (std::string) dalam C

Dalam C , adalah perkara biasa untuk menggunakan pernyataan bersyarat untuk memanggil fungsi berdasarkan yang diberikan rentetan. Walau bagaimanapun, pendekatan ini boleh menjadi verbose dan tidak fleksibel.

Refleksi dalam C

Keupayaan untuk memanggil fungsi dengan namanya dikenali sebagai refleksi. Malangnya, C tidak menyokong ciri ini secara asli.

Penyelesaian Menggunakan std::map

Satu penyelesaian ialah mencipta std::map yang mengaitkan nama fungsi (std::string) dengan penunjuk fungsi. Untuk fungsi dengan prototaip yang sama, teknik ini memudahkan proses:

<code class="cpp">#include <iostream>
#include <map>

int add(int i, int j) { return i + j; }
int sub(int i, int j) { return i - j; }

typedef int (*FnPtr)(int, int);

int main() {
    // Initialize the map:
    std::map<std::string, FnPtr> myMap;
    myMap["add"] = add;
    myMap["sub"] = sub;

    // Usage:
    std::string s("add");
    int res = myMap[s](2, 3);
    std::cout << res;
}</code>
Salin selepas log masuk

Dalam contoh ini, myMap[s](2, 3) mendapatkan kembali penuding fungsi yang dipetakan pada rentetan s dan menggunakan fungsi yang sepadan dengan hujah 2 dan 3. Outputnya ialah 5.

Atas ialah kandungan terperinci Bagaimana untuk Mencapai Fungsi seperti Refleksi dalam C Menggunakan std::map?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan