Je conçois (brainstorming) un cadre de plugin C++ pour une architecture extensible. Chaque plugin enregistre une interface, qui est implémentée par le plugin lui-même. Un tel framework peut fonctionner sur des appareils embarqués relativement performants (par exemple Atom/ARM) donc je peux utiliser STL et Boost.
Pour le moment, j'ai réussi à écrire un framework similaire, dans lequel les interfaces sont connues à l'avance et les plugins (chargés à partir de bibliothèques dynamiques) enregistrent les objets les implémentant. Ces objets sont instanciés au besoin par leurs méthodes de fabrique, et les méthodes sont appelées correctement.
Maintenant, je veux le rendre plus flexible, en permettant aux plugins d'enregistrer de nouvelles interfaces (et pas seulement d'implémenter celles déjà existantes), étendant ainsi l'API disponible aux utilisateurs du framework.
J'ai pensé à utiliser un std::map, qui est également mentionné dans plusieurs articles et réponses de stackoverflow que j'ai lus. Malheureusement, cela ne semble pas couvrir le cas des différentes interfaces de méthode.
J'ai l'impression que cela pourrait avoir quelque chose à voir avec la méta-programmation des templates, ou des traits peut-être, mais je n'arrive pas à comprendre comment cela devrait fonctionner exactement. Est-ce que quelqu'un peut m'aider?