Maison >développement back-end >C++ >Comment obtenir une fonctionnalité de type réflexion en C à l'aide de std :: map ?

Comment obtenir une fonctionnalité de type réflexion en C à l'aide de std :: map ?

DDD
DDDoriginal
2024-10-27 01:22:30997parcourir

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

Comment appeler une fonction par son nom (std::string) en C

En C, il est courant d'utiliser des instructions conditionnelles pour appeler des fonctions en fonction d'un élément donné chaîne. Cependant, cette approche peut être verbeuse et rigide.

Réflexion en C

La possibilité d'appeler une fonction par son nom est connue sous le nom de réflexion. Malheureusement, C ne prend pas en charge cette fonctionnalité de manière native.

Solution de contournement en utilisant std::map

Une solution de contournement consiste à créer un std::map qui associe les noms de fonctions (std::string) à pointeurs de fonction. Pour les fonctions avec le même prototype, cette technique simplifie le processus :

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

Dans cet exemple, myMap[s](2, 3) récupère le pointeur de fonction mappé sur la chaîne s et appelle la fonction correspondante avec arguments 2 et 3. Le résultat serait 5.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn