Heim > Backend-Entwicklung > C++ > Wie kann ich in C Funktionen nach Namen aufrufen (in einem std::string gespeichert)?

Wie kann ich in C Funktionen nach Namen aufrufen (in einem std::string gespeichert)?

Patricia Arquette
Freigeben: 2024-10-26 07:04:31
Original
1036 Leute haben es durchsucht

How Can I Call Functions by Name (Stored in a std::string) in C  ?

Aufrufen von Funktionen nach Namen (std::string) in C

In C kann man eine in a gespeicherte Funktion nicht direkt nach Namen aufrufen Zeichenfolge. Es gibt jedoch Problemumgehungen, um diese Funktionalität zu erreichen.

Grundlegender Ansatz

Der grundlegende Ansatz beinhaltet die Verwendung einer Reihe von „if-else“-Anweisungen oder eines „switch-case“ Konstrukt, das explizit nach dem in der Zeichenfolge gespeicherten Funktionsnamen sucht und die entsprechende Funktion aufruft. Wie im bereitgestellten Codeausschnitt gezeigt, erfordert diese Methode die manuelle Pflege einer Liste von Funktionen und deren Namen.

Reflexion

Der in der Frage vorgeschlagene Ansatz wird als bezeichnet Reflexion, bei der zur Laufzeit dynamisch auf Programmelemente zugegriffen und diese manipuliert werden. Während Reflektion in C nicht nativ unterstützt wird, bieten einige Bibliotheken eingeschränkte Reflektionsfähigkeiten.

Problemumgehung mit std::map

Eine Problemumgehung besteht darin, eine std::map zu erstellen, die Ordnet Funktionsnamen (std::string-Tasten) Funktionszeigern (int (*FnPtr)(int, int)-Werte) zu. Dies ermöglicht ein effizientes Abrufen und Aufrufen von Funktionen basierend auf ihren Namen.

Das bereitgestellte Code-Snippet veranschaulicht diesen Ansatz:

<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>
Nach dem Login kopieren

In diesem Beispiel sind die myMap[s](2, 3 )-Ausdruck ruft den mit der Zeichenfolge „add“ verknüpften Funktionszeiger ab und ruft ihn mit den Argumenten 2 und 3 auf, was zu einer Ausgabe von 5 führt.

Das obige ist der detaillierte Inhalt vonWie kann ich in C Funktionen nach Namen aufrufen (in einem std::string gespeichert)?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage