Heim >Backend-Entwicklung >C++ >Wie rufe ich eine C-Funktion anhand ihres in einem String gespeicherten Namens auf?

Wie rufe ich eine C-Funktion anhand ihres in einem String gespeicherten Namens auf?

Susan Sarandon
Susan SarandonOriginal
2024-10-28 11:04:30753Durchsuche

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

Aufrufen einer Funktion über ihren Namen (std::string) in C

In C die Frage, ob eine Funktion über ihren Namen aufgerufen werden soll in einem String gespeichert ist entstanden. Obwohl ein grundlegender Ansatz mit bedingten Anweisungen bekannt ist, wurde nach einfacheren Alternativen gesucht.

Grundlegender Ansatz

Eine einfache Methode beinhaltet die Verwendung einer Reihe von if-else-Anweisungen zum Abgleichen der Funktionsname mit dem entsprechenden Funktionszeiger. Dieser Ansatz wird unten veranschaulicht:

<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>

Vorgeschlagene Alternative

Der neue Ansatz zielt darauf ab, den Aufrufprozess zu vereinfachen, indem ein std::map zum Zuordnen von Funktionsnamen verwendet wird Funktionszeiger. Für Funktionen mit identischen Prototypen kann diese Technik eine prägnantere Lösung bieten:

<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>

Dieser Ansatz nutzt die myMap[s](2,3)-Syntax, die den Funktionszeiger abruft, der der Zeichenfolge s und zugeordnet ist ruft die entsprechende Funktion mit den bereitgestellten Argumenten auf. Das gezeigte Beispiel berechnet und gibt 5 als Ergebnis des Funktionsaufrufs „add“ aus.

Das obige ist der detaillierte Inhalt vonWie rufe ich eine C-Funktion anhand ihres in einem String gespeicherten Namens auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn