Je viens de commencer mon voyage en tant que développeur C ++ et j'ai récemment étudié un sujet appelé méta-programmation. Jusqu'à présent, j'ai parcouru beaucoup d'informations sur le sujet et j'ai quelques questions.
Utilisation de Reflection en c ++: est-ce possible? Selon ma compréhension, la réflexion est une technique de méta-programmation qui a la capacité de manipuler un état d'un programme, et sa manipulation peut être une introspection ou une introcession.
Quelle est la différence entre l'architecture réfléchissante et l'architecture de méta-niveau? Dans quelle catégorie appartient l'architecture de méta-programmation?
La méta-programmation se décline en deux niveaux: le méta-niveau et le niveau de base. À ma connaissance, le programme objet ou le système sous enquête est le niveau de base, et le méta-programme qui va fonctionner sur le système sous enquête est le niveau méta. Ai-je raison?
Aidez-moi également en fournissant quelques directives sur le travail sur la métaprogrammation de modèles en C ++.
Pouvez-vous me suggérer quelques exemples pratiques que je peux rechercher pour me familiariser avec cette technique de programmation?
Réponses:
La métaprogrammation signifie simplement que vous avez les moyens d'écrire du code qui écrit un autre code (au sens large). C ++ le fait via le mécanisme de modèle, qui est fondamentalement un langage de macro de type sécurisé. Il est parfaitement possible d'appliquer simplement l'étape d'extension du modèle, et le résultat sera un code C ++ sans modèle valide.
La réflexion est la capacité d'un langage de programmation et / ou d'un environnement d'exécution à inspecter (et souvent à modifier) ses propres éléments de langage au moment de l'exécution. En règle générale, les langages réfléchissants offrent des structures de données qui représentent des éléments de langage tels que des classes, des méthodes, des variables, des paramètres, etc., ainsi que des routines ou des classes pour les inspecter, les modifier et les créer. La capacité de modification fait de la réflexion un type de méta-programmation, car elle vous permet d'écrire du code qui génère un autre code.
D'autres exemples de métaprogrammation incluent les générateurs de code, les binaires auto-modifiables (bien qu'ils ne soient plus aussi populaires aujourd'hui qu'ils l'étaient il y a deux décennies), les macros C; on pourrait faire valoir que le curry et les techniques de programmation fonctionnelle similaires sont également une sorte de métaprogrammation.
la source
2-3. Je ne sais pas - attendez une autre réponse qui aide à cela :-)
La méta-programmation utilisant des modèles C ++ est très puissante, mais aussi complexe. L'extension du modèle nécessite un style de programmation fonctionnel plutôt qu'une programmation impérative que C ++ utilise. Si vous n'avez pas d'expérience avec la programmation fonctionnelle, je vous recommanderais de faire un détour et d'apprendre quelques lisp, haskell ou schémas de base.
la source