Ich habe vor nicht allzu langer Zeit eine Frage gestellt: C++ Runtime Knowledge of Classes und die Antwort, die ich von einem StackOverflow-Benutzer "Denice" erhielt, war eine URL zu einer Website Meatspace: C++ runtime class registration.
Ich denke, das ist eine wirklich coole Möglichkeit, Vorlagen zu verwenden und Objekte zu instantiieren, die alle von einer Basisklasse abgeleitet sind, so dass wenn ich 10 C++ Dateien habe, sie alle AUTO_REGISTER_BASE() ganz unten hinzufügen können Wenn alles fertig und verknüpft ist, werden nur die Klassen/Dateien registriert, die es erstellt haben, so dass Sie zur Laufzeit zwischen den verschiedenen verfügbaren Klassen wechseln können, und diejenigen, die nicht verfügbar sind, sind nicht registriert und können daher nicht zufällig sein namens.
Es gibt viele verschiedene OS-abhängige Möglichkeiten, um Ereignisbenachrichtigungen zu machen (select(), kqueue(),/dev/epoll, Solaris hat seine eigene Sache, poll()), und ich brauchte einen Weg, um alle Klassendateien existieren in dem Verzeichnis, aber abhängig davon, auf welchem OS das Makefile ausgeführt wurde, würde es nur bestimmte kompilieren. Ich brauchte eine Möglichkeit, um zu wissen, welche zur Zeit verfügbar waren, und einen Weg für den Programmierer zu haben, die Bibliothek zu benutzen, um ihre Präferenz zu wählen, wenn es aber nicht möglich war, diejenige zu verwenden, die für die Plattform am logischsten war Gewichte zugewiesen haben).
Der Code oben half mir, dieses Ziel zu erreichen, mit einigen heftigen Modifikationen, aber es half mir dennoch!
Ich denke Boost Metaparse ist eine wirklich erstaunliche Sache https://github.com/boostorg/metaparse https://github.com/sabel83/metaparse_tutorial –