Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Memanggil Fungsi C dengan Namanya Disimpan dalam Rentetan?

Bagaimana untuk Memanggil Fungsi C dengan Namanya Disimpan dalam Rentetan?

Susan Sarandon
Susan Sarandonasal
2024-10-28 11:04:30679semak imbas

How to Call a C   Function by Its Name Stored in a String?

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

Dalam C , persoalan memanggil fungsi dengan namanya disimpan dalam rentetan telah timbul. Walaupun pendekatan asas yang melibatkan pernyataan bersyarat diketahui, alternatif yang lebih mudah telah dicari.

Pendekatan Asas

Kaedah mudah melibatkan penggunaan satu siri pernyataan if-else untuk dipadankan nama fungsi dengan penunjuk fungsi yang sepadan. Pendekatan ini digambarkan di bawah:

<code class="cpp">int function_1(int i, int j) { return i*j; }
int function_2(int i, int j) { return i/j; }

int callFunction(int i, int j, string function) {
    if(function == "function_1") {
        return function_1(i, j);
    } else if(function == "function_2") {
        return function_2(i, j);
    } ...
    return function_1(i, j);
}</code>

Cadangan Alternatif

Pendekatan baharu ini bertujuan untuk memudahkan proses panggilan dengan menggunakan std::map untuk memetakan nama fungsi kepada penunjuk fungsi. Untuk fungsi dengan prototaip yang sama, teknik ini boleh memberikan penyelesaian yang lebih ringkas:

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

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

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

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>

Pendekatan ini menggunakan sintaks myMap[s](2,3), yang mendapatkan kembali penuding fungsi yang dipetakan pada rentetan s dan memanggil fungsi yang sepadan dengan hujah yang disediakan. Contoh yang ditunjukkan mengira dan mengeluarkan 5 sebagai hasil daripada panggilan fungsi "tambah".

Atas ialah kandungan terperinci Bagaimana untuk Memanggil Fungsi C dengan Namanya Disimpan dalam Rentetan?. 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