Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erreicht man mit std::map eine reflexionsähnliche Funktionalität in C?

Wie erreicht man mit std::map eine reflexionsähnliche Funktionalität in C?

DDD
DDDOriginal
2024-10-27 01:22:30895Durchsuche

How to Achieve Reflection-like Functionality in C   Using std::map?

So rufen Sie eine Funktion anhand ihres Namens (std::string) in C auf

In C ist es üblich, bedingte Anweisungen zu verwenden, um Funktionen basierend auf einer gegebenen Funktion aufzurufen Zeichenfolge. Dieser Ansatz kann jedoch ausführlich und unflexibel sein.

Reflexion in C

Die Fähigkeit, eine Funktion über ihren Namen aufzurufen, wird als Reflexion bezeichnet. Leider unterstützt C diese Funktion nicht nativ.

Problemumgehung mit std::map

Eine Problemumgehung besteht darin, eine std::map zu erstellen, die Funktionsnamen (std::string) mit verknüpft Funktionszeiger. Für Funktionen mit demselben Prototyp vereinfacht diese Technik den Prozess:

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

In diesem Beispiel ruft myMap[s](2, 3) den Funktionszeiger ab, der der Zeichenfolge s zugeordnet ist, und ruft die entsprechende Funktion mit auf Argumente 2 und 3. Die Ausgabe wäre 5.

Das obige ist der detaillierte Inhalt vonWie erreicht man mit std::map eine reflexionsähnliche Funktionalität in C?. 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