Ich arbeite an der Implementierung eines Reflexionsmechanismus in C++. Alle Objekte in meinem Code sind eine Unterklasse von Object (mein eigener generischer Typ), die ein statisches Mitgliedsdatenelement vom Typ Class enthalten.
class Class{
public:
Class(const std::string &n, Object *(*c)());
protected:
std::string name; // Name for subclass
Object *(*create)(); // Pointer to creation function for subclass
};
Für jede Unterklasse von Object mit einem statischen Class-Member-Datum möchte ich in der Lage sein, 'create' mit einem Zeiger auf den Konstruktor dieser Unterklasse zu initialisieren.
0 Stimmen
Auch wenn dies erst 6 Jahre später geschieht - Sie sollten sich gut überlegen, ob Sie wirklich Ihre eigene Reflexionsmechanik einführen wollen. Überlegen Sie zunächst, ob Sie sich mit der Kompilierzeit-"Reflexion" unter Verwendung von Templates, type_traits und dem SFINAE-Prinzip zufrieden geben wollen; dann probieren Sie eine der vorhandenen C++-Reflection-Bibliotheken aus; und erst dann würde ich in Erwägung ziehen, es selbst zu versuchen.