Est-il C/C++ équivalent de la fonction eval(“function(arg1, arg2)”)?
il faut appeler la fonction dont le nom est stocké dans une chaîne similaire à la fonction eval. Pouvez-vous aider?
- Nope, votre meilleur pari est le modèle de commande.
- Si vous êtes prêt à vous incliner devant la puissance de qt, oui: qt-project.org/doc/qt-4.8/QMetaObject.html
- Il y a quelques C++ interprètes: stackoverflow.com/questions/69539/...
- -1 C'est une idée terrible et je ne peux pas en bonne conscience de l'encourager. Si vous prenez l'habitude de résoudre les problèmes de
eval
, vous obtenez une très, très mauvaise habitude. Votre code sera lente, inefficace, vulnérables et difficiles à comprendre. - Donc, parce que c'est une mauvaise pratique, on ne doit pas en connaître l'existence et les possibilités? De chemin à faire copain! Je ne pouvais pas ignorer vos cours en toute bonne conscience.
Vous devez vous connecter pour publier un commentaire.
C++ n'ont pas de reflet, de sorte que vous devez pirater, je. e.:
function
est nouvelle classe en C++11 qui est enfunctional
en-tête.-std=c++11
drapeau pour obtenir cette compilation et de travail.void foo(x){std::cout<<x;}
et je entréefoo(2)
, comment passer à l'appel", comme vous dites ci-dessus? Je reçois ce que je dois changer la carte mais comment pourrais-je extraire les arguments de la chaîne?Il y a au moins 2 solutions:
GetProcAddress
pour obtenir un rappel par leur nom, etdlopen
+dlsym
sur *nix.Vous pourriez essayer d'adopter un existant moteur de script, d'exposer les fonctions que vous aimez et ensuite l'utiliser pour évaluer vos déclarations. L'un de ces enging pourrait être le moteur V8: https://developers.google.com/v8/intro mais il y a beaucoup de solutions de rechange et des langues différentes à choisir.
Voici quelques exemples:
À l'exception de l'aide de la fonction de la carte dans le programme et de le modifier sur le fichier Makefile, vous pouvez y accéder par le biais de ELFE.
Je pense que cette méthode est la meilleure car elle n'a pas besoin d'écrire du code en double et de les compiler à chaque fois sur l'autre machine.
Ici est mon démo C/C++ équivalent de la fonction eval(“function(arg1, arg2)”)
Cette mise en œuvre est basée sur Exemple d'Impression de l'ELFE de la Table des symboles