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.
Die Fähigkeit, eine Funktion über ihren Namen aufzurufen, wird als Reflexion bezeichnet. Leider unterstützt C diese Funktion nicht nativ.
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!