Reflection?
-
Servus,
gibts in C++ auch Reflection?
danke
-
Möglicherweise findest du für sowas 3rd Party-Libs.
Achtung: nachfolgender Teil stellt meine persönliche Meinung dar
---
*
C++ bietet keine Sprachmittel zur Unterstützung von Reflection und alles was du kriegen kannst ist mehr oder weniger ein "Hack", der schon mal mit Sicherheit nicht portabel ist und bestimmt noch andere Nachteile hat.
Wenn du auf Reflection angewiesen bist, ist C++ vielleicht nicht die geschickteste Wahl.
*
-
Auch wenn ich es ebenfalls unter "unschöne Hacks" einsortieren würde, es gibt die Boost Type Traits-Library unter www.boost.org.
-
Im CUJ war neulich ne Library die das anbot. Portabel war die wohl schon, aber ein Hack leider auch... alles mit Makros.
-
operator void schrieb:
Auch wenn ich es ebenfalls unter "unschöne Hacks" einsortieren würde, es gibt die Boost Type Traits-Library unter www.boost.org.
type traits haben was mit reflection zu tun?
-
otze schrieb:
operator void schrieb:
Auch wenn ich es ebenfalls unter "unschöne Hacks" einsortieren würde, es gibt die Boost Type Traits-Library unter www.boost.org.
type traits haben was mit reflection zu tun?
Sicher. Zumindest wenn du mit Reflection nicht automatisch runtime reflection meinst.
Reflection ist ja letztlich die Fähigkeit eines Programms "auf sich selbst" zu arbeiten. Wenn du jetzt die Zeit wann dies stattfindet nicht auf "Laufzeit" festlegst, dann kann man C++ Template-Metaprogramming Reflection-Mechanismus betrachten, der aber zur Compilezeit abläuft.Um Reflection zu ermöglichen, muss ein Programm ein Modell seiner selbst besitzen. C++-Programme besitzen von sich aus kein solches Modell (bzw. nur ein sehr minimales). Mit den Techniken aus der Template-Metaprogrammierung kann man ein solches Modell aber zur Compile-Zeit aufbauen.
Nach Gabriel et al.[1] besteht Reflection aus zwei Aspekten:[...]There are two aspects of such manipulation: introspection and intercession. Introspection is the ability of a program to observe and therefore reason about its own state. Intercession is the ability of a program
to modify its own execution state or alter its own interpretation or meaningZur Compilezeit ermöglicht C++ sowohl introspection als intercession. Mit den Type-Traits kann man so z.B. nicht nur den Typ eines Ts herausfinden sondern diesen auch manipulieren, man kann Klassen und Funktionen erzeugen usw.
Zur Laufzeit hingegen sind die Reflection-Eigenschaften von C++ auf sehr rudimentäre introspection-Mechanismen (RTTI) beschränkt. Ohne zusätzliche Tools (wie z.B. den moc der Qt) lässt sich daran auch nichts ändern.
Java hingegen hat reichhaltige introspection-Mechanismen, bietet auf der anderen Seite aber keine intercession-Mechanismen wie z.B. Smalltalk (wo man z.B. zur Laufzeit Klassen verändern kann).
[1]Gabriel, Bobrow, White: "CLOS in Context - The Shape of the Design Space".
-
otze schrieb:
type traits haben was mit reflection zu tun?
Klar. Sie reflektieren Attribute von Typen. Das ist Reflection.
Der große Vorteil: das ganze ohne Runtime Overhead
Der große Nachteil: es ist sehr beschränkte Compiletime Reflection (also idR nicht für typische Reflection benötigende Situationen geeignet).Aber etwas zu tun haben sie schon miteinander