Ich habe gerade meine Reise als C ++ - Entwickler begonnen und habe kürzlich ein Thema namens Metaprogrammierung untersucht. Bisher habe ich viele Informationen zu diesem Thema durchgesehen und habe nur wenige Fragen.
Verwendung von Reflection in c ++: Ist das möglich? Nach meinem Verständnis ist Reflexion eine Metaprogrammiertechnik, die einen Status eines Programms manipulieren kann und deren Manipulation Introspektion oder Introzession sein kann.
Was ist der Unterschied zwischen reflektierender Architektur und Architektur auf Metaebene? In welche Kategorie fällt die Meta-Programmierarchitektur?
Die Meta-Programmierung erfolgt in zwei Ebenen: Meta-Ebene und Basisebene. Nach meinem Verständnis ist das Objektprogramm oder das untersuchte System die Basisebene, und das Metaprogramm, das über dem untersuchten System ausgeführt wird, ist die Metaebene. Hab ich recht?
Helfen Sie mir auch, indem Sie einige Richtlinien zum Arbeiten an der Metaprogrammierung von Vorlagen in C ++ bereitstellen.
Können Sie mir einige praktikable Beispiele vorschlagen, nach denen ich suchen kann, um diese Programmiertechnik in die Hand zu nehmen?
Antworten:
Metaprogrammierung bedeutet einfach, dass Sie die Möglichkeit haben, Code zu schreiben, der anderen Code schreibt (im weiteren Sinne). C ++ tut dies über den Vorlagenmechanismus, der im Grunde eine typsichere Makrosprache ist. Es ist durchaus möglich, nur den Schritt zur Vorlagenerweiterung anzuwenden, und das Ergebnis ist gültiger vorlagenfreier C ++ - Code.
Reflexion ist die Fähigkeit einer Programmiersprache und / oder Laufzeitumgebung, ihre eigenen Sprachelemente zur Laufzeit zu überprüfen (und häufig zu ändern). In der Regel bieten reflektierende Sprachen Datenstrukturen, die Sprachelemente wie Klassen, Methoden, Variablen, Parameter usw. darstellen, sowie Routinen oder Klassen, um sie zu überprüfen, zu ändern und zu erstellen. Die Änderungsfunktion macht Reflektion zu einer Art Metaprogrammierung, da Sie Code schreiben können, der anderen Code generiert.
Andere Beispiele für Metaprogrammierung sind Codegeneratoren, selbstmodifizierende Binärdateien (obwohl diese heute nicht mehr so beliebt sind wie vor zwei Jahrzehnten), C-Makros; Man könnte argumentieren, dass Currying und ähnliche funktionale Programmiertechniken auch eine Art Metaprogrammierung sind.
quelle
2-3. Ich weiß nicht - warte auf eine andere Antwort, die dabei hilft :-)
Die Metaprogrammierung mit C ++ - Vorlagen ist sehr leistungsfähig, aber auch komplex. Die Vorlagenerweiterung erfordert eher einen funktionalen Programmierstil als eine zwingende Programmierung, die C ++ verwendet. Wenn Sie noch keine Erfahrung mit funktionaler Programmierung haben, würde ich Ihnen empfehlen, einen Umweg zu machen und ein grundlegendes Lisp, Haskell oder Schema zu lernen.
quelle