Bagaimana untuk Memanggil Fungsi C dengan Namanya Disimpan dalam Rentetan?

Susan Sarandon
Lepaskan: 2024-10-28 11:04:30
asal
678 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!