Eintrag
Wer hat Open Source-Bibliotheken nicht besucht und dachte: „Danke an diese Jungs für diese coole Bibliothek ! Eines Tages werde ich etwas Wertvolles schreiben und es öffentlich machen, damit andere es nutzen können! "
Ja alle zusammen! Oder nicht? ..
Mit dem Aufkommen des C ++ 17-Standards werden unsere
viel schneller und eleganter aufgelöst. Sie müssen nur Ihre Idee verwirklichen und die Leckereien, mit denen uns die Jungs von WG21 verwöhnen, in die Praxis umsetzen können .
? : #, )) ...
Hintergrund
Das Thema Plugins ist sehr interessant, da Sie damit neue Funktionen in der Software (Software) vornehmen können, ohne Änderungen am Kern des Programms vornehmen zu müssen. Gleichzeitig sollte jedoch eine Schnittstelle für die Interaktion durchdacht und geschrieben werden: Software <-> Plugins Manager <-> Plugins .
Ich habe Erfahrung (erfolglos) mit der Befragung eines Unternehmens, das über ein eigenes Plug-In-System für eingebettete Systeme verfügt, aufgrund der Komplexität der Architektur, bei der ich die Testaufgabe nicht bestanden habe. Es gibt viele Makros in den Basisklassen, von denen es geerbt wird, und viele Dinge, die den Alltag des Programmierers zum Zeitpunkt der Verwendung solcher Lösungen grau machen ...
In einem Moment der Selbstbildung und des Lesens von Artikeln über C ++ 17 wurde beschlossen, das gewonnene Wissen beim Schreiben eines Plug-in-Systems zu konsolidieren, das verständlich und einfach zu verwenden ist.
Wie schlecht oder gut ich es getan habe - urteile dich, liebe Chabrowiten ...
Rückblick
Bibliotheksfunktionen
- Plugins als Services (in separaten Trades ausgeführt)
- Nicht verwendete Plugins automatisch entladen
Vorteile
- Benutzerfreundlichkeit
- Asynchrone Taskausführung
- Nur-Header-Design
Nachteile
- Wenn ein neues Plugin in das System eingeführt wird, muss es mit derselben Version des Compilers kompiliert werden wie der Manager, der es herunterlädt (sowie libstdc ++), um die ABI-Kompatibilität zu gewährleisten
- Konstante Caches von std :: any zu den verwendeten Typen?
- Validierung von Futures?
Plugin-Erstellung
class myplugin : public micro::iplugin { public: myplugin(int ver, const std::string& nm):micro::iplugin(ver, nm) {
Plugin herunterladen
std::shared_ptr<micro::plugins> manager = micro::plugins::get(); std::shared_ptr<micro::iplugin> myplugin = manager->get_plugin("myplugin"); if (myplugin && myplugin->has<2>("sum2")) { std::shared_future<std::any> result = myplugin->run<2>("sum2", 25, 25); result.wait(); std::cout << std::any_cast<int>(result.get()) << std::endl; }
Weitere detaillierte Beispiele finden Sie auf der Projektseite.
Anstelle einer Schlussfolgerung
Ich freue mich sehr, informative Artikel über Habra in C ++ (und nicht nur in C ++) zu lesen.
Ich hoffe, Sie finden diesen Artikel interessant und zumindest etwas informativ.
Meiner bescheidenen Meinung nach können Sie lib in prod verwenden, sie sich autorisierendere C ++ ansehen und ihr Wort sagen, der Quellcode ist gut dokumentiert und es gibt nicht viele von ihnen - ungefähr 1000 Zeilen.
Link zum Projekt
Mikroplugins