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

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

DDD
DDDasal
2024-10-27 01:22:30895semak imbas

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>

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:
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