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.
Keupayaan untuk memanggil fungsi dengan namanya dikenali sebagai refleksi. Malangnya, C tidak menyokong ciri ini secara asli.
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!