Entrée
Qui n'a pas visité, en utilisant des bibliothèques open-source, la pensée: "Merci à ces gars pour cette lib cool! Un jour, j'écrirai quelque chose de valable et le mettrai en public pour que les autres puissent l'utiliser! "
Oui tout le monde! Ou pas? ..
Avec l'avènement de la norme C ++ 17, notre
est résolue beaucoup plus rapidement et plus élégamment, il vous suffit de vouloir réaliser votre idée et de pouvoir mettre en pratique les goodies avec lesquels les gars de WG21 nous gâtent.
? : #, )) ...
Contexte
Le sujet des plugins est assez intéressant, car il vous permet de faire de nouvelles fonctionnalités dans le logiciel (logiciel) sans apporter de modifications au cœur du programme, mais en même temps, une interface d'interaction doit être pensée et écrite: Software <-> Plugins Manager <-> Plugins .
J'ai de l'expérience (infructueuse) en interviewant une entreprise qui possède son propre système de plug-in pour les systèmes embarqués, en raison de la complexité de l'architecture dont j'ai échoué la tâche de test. Il existe de nombreuses macros à l'intérieur des classes de base dont elles sont héritées, et beaucoup de choses qui rendent la vie quotidienne du programmeur grise au moment d'utiliser de telles solutions ...
À l'un des moments de l'auto-éducation et de la lecture d'articles sur C ++ 17, il a été décidé de consolider les connaissances acquises lors de l'écriture d'un système de plug-in qui serait compréhensible et facile à utiliser.
Comme je l'ai fait mal ou bien - jugez-vous, cher Khabrovites ...
Revue
Fonctionnalités de la bibliothèque
- Plugins en tant que services (exécutés dans des métiers distincts)
- Déchargez automatiquement les plugins inutilisés
Avantages
- Facilité d'utilisation
- Exécution de tâches asynchrones
- Conception uniquement en-tête
Inconvénients
- Si un nouveau plugin est introduit dans le système, il doit être compilé avec la même version du compilateur que le gestionnaire le téléchargeant (ainsi que libstdc ++) pour la compatibilité ABI
- Caches constants de std :: any aux types utilisés?
- Validation des futurs?
Création de plugin
class myplugin : public micro::iplugin { public: myplugin(int ver, const std::string& nm):micro::iplugin(ver, nm) {
Télécharger le plugin
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; }
Voir des exemples plus détaillés sur la page du projet.
Au lieu d'une conclusion
Je suis très heureux de lire des articles informatifs sur Habra en C ++ (et pas seulement en C ++),
J'espère que vous trouverez cet article intéressant et au moins quelque peu informatif.
À mon humble avis, vous pouvez utiliser lib in prod, laissez-les jeter un œil à des C ++ plus autoritaires et dites leur mot, le code source est bien documenté et il n'y en a pas beaucoup - environ 1000 lignes.
Lien vers le projet
microplugins