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!