Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Saya Boleh Memanggil Fungsi mengikut Nama (Disimpan dalam std::string) dalam C ?

Bagaimanakah Saya Boleh Memanggil Fungsi mengikut Nama (Disimpan dalam std::string) dalam C ?

Patricia Arquette
Patricia Arquetteasal
2024-10-26 07:04:31938semak imbas

How Can I Call Functions by Name (Stored in a std::string) in C  ?

Memanggil Fungsi mengikut Nama (std::string) dalam C

Dalam C , seseorang tidak boleh memanggil terus fungsi dengan nama yang disimpan dalam rentetan. Walau bagaimanapun, penyelesaian wujud untuk mencapai fungsi ini.

Pendekatan Asas

Pendekatan asas melibatkan penggunaan satu siri pernyataan "jika-lain" atau "switch-case" membina, memeriksa secara eksplisit nama fungsi yang disimpan dalam rentetan dan memanggil fungsi yang sepadan. Seperti yang ditunjukkan dalam coretan kod yang disediakan, kaedah ini memerlukan pengekalan senarai fungsi dan namanya secara manual.

Refleksi

Pendekatan yang dicadangkan dalam soalan dirujuk sebagai refleksi, yang melibatkan mengakses dan memanipulasi elemen program secara dinamik semasa masa jalan. Walaupun refleksi tidak disokong secara asli dalam C , sesetengah perpustakaan menyediakan keupayaan refleksi terhad.

Penyelesaian Menggunakan std::map

Satu penyelesaian melibatkan mencipta std::map yang mengaitkan nama fungsi (std::kunci rentetan) dengan penunjuk fungsi (nilai int (*FnPtr)(int, int). Ini membolehkan perolehan semula dan penggunaan fungsi yang cekap berdasarkan namanya.

Coretan kod yang disediakan menggambarkan pendekatan ini:

<code class="c++">#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() {
    std::map<std::string, FnPtr> myMap;
    myMap["add"] = add;
    myMap["sub"] = sub;

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

Dalam contoh ini, myMap[s](2, 3 ) ungkapan mendapatkan kembali penuding fungsi yang dikaitkan dengan rentetan "tambah" dan memanggilnya dengan argumen 2 dan 3, menghasilkan output 5.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memanggil Fungsi mengikut Nama (Disimpan dalam std::string) dalam C ?. 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