Entrada
Quien no visitó, usando bibliotecas de código abierto, pensó: "¡Gracias a estos muchachos por esta genial lib! ¡Algún día escribiré algo que valga la pena y lo pondré en público para que otros puedan usarlo! "
Si todos! O no? ..
Con el advenimiento del estándar C ++ 17, nuestra
se resuelve de manera mucho más rápida y elegante, solo debe querer realizar su idea y poder poner en práctica los beneficios con los que los chicos de WG21 nos miman .
? : #, )) ...
Antecedentes
El tema de los complementos es bastante interesante, ya que le permite crear una nueva funcionalidad en el Software (software) sin realizar cambios en el núcleo del programa, pero al mismo tiempo, debe pensarse y escribirse una interfaz para la interacción: Software <-> Plugins Manager <-> Complementos .
Tengo experiencia (sin éxito) en entrevistar a una empresa que tiene su propio sistema de plug-in para sistemas integrados, debido a la complejidad de la arquitectura en la que fallé la tarea de prueba. Hay muchas macros dentro de las clases base de las cuales se hereda, y muchas cosas que hacen que la vida cotidiana del programador sea gris al momento de usar tales soluciones ...
En uno de los momentos de autoeducación y lectura de artículos sobre C ++ 17, se decidió consolidar el conocimiento adquirido al escribir un sistema de complemento que sería comprensible y fácil de usar.
Qué mal o qué bien lo hice, juzgad, queridos Khabrovites ...
Revisar
Características de la biblioteca
- Complementos como servicios (se ejecutan en operaciones separadas)
- Descargar automáticamente complementos no utilizados
Pros
- Facilidad de uso
- Ejecución asincrónica de tareas
- Diseño de solo encabezado
Contras
- Si se introduce un nuevo complemento en el sistema, debe compilarse con la misma versión del compilador que el administrador que lo descarga (así como libstdc ++) para la compatibilidad ABI
- Cachés constantes de std :: any a los tipos utilizados?
- Validación de futuros?
Creación de complementos
class myplugin : public micro::iplugin { public: myplugin(int ver, const std::string& nm):micro::iplugin(ver, nm) {
Descargar 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; }
Vea ejemplos más detallados en la página del proyecto.
En lugar de una conclusión
Me complace mucho leer artículos informativos sobre Habra en C ++ (y no solo en C ++),
Espero que encuentre este artículo interesante y al menos algo informativo.
En mi humilde opinión, puede usar lib en prod, dejar que echen un vistazo a los C ++ más autorizados y decir su palabra, el código fuente está bien documentado y no hay muchos de ellos, alrededor de 1000 líneas.
Enlace al proyecto
microplugins