Entrada
Quem não visitou, usando bibliotecas de código-fonte aberto, o pensamento: "Obrigado a esses caras por esta interessante lib! Um dia vou escrever algo que valha a pena e publicá-lo para que outros possam usá-lo! "
Sim pessoal! Ou não?
Com o advento do padrão C ++ 17, nossa lista de
é resolvida com muito mais rapidez e elegância, você só precisa realizar sua ideia e poder colocar em prática os itens com os quais os caras do WG21 nos mimam.
? : #, )) ...
Antecedentes
O tópico dos plug-ins é bastante interessante, pois permite que você faça novas funcionalidades no Software (software) sem fazer alterações no núcleo do programa, mas ao mesmo tempo, uma interface de interação deve ser pensada e escrita: Software <-> Plugins Manager <-> Plugins .
Tenho experiência (sem êxito) em entrevistar uma empresa que possui seu próprio sistema de plug-in para sistemas embarcados, devido à complexidade da arquitetura da qual falhei na tarefa de teste. Existem muitas macros nas classes base das quais é herdada e muitas coisas que tornam a vida cotidiana do programador obscurecida na hora de usar essas soluções ...
Em um dos momentos de auto-educação e leitura de artigos sobre C ++ 17, foi decidido consolidar o conhecimento adquirido ao escrever um sistema de plug-in que seria compreensível e fácil de usar.
Quão ruim ou bom eu fiz isso - julgue você, queridos Khabrovites ...
Revisão
Recursos da biblioteca
- Plugins como serviços (executados em transações separadas)
- Descarregar automaticamente plugins não utilizados
Prós
- Facilidade de uso
- Execução de tarefa assíncrona
- Design apenas de cabeçalho
Contras
- Se um novo plug-in for introduzido no sistema, ele deverá ser compilado com a mesma versão do compilador que o gerenciador que o baixou (assim como o libstdc ++) para compatibilidade com ABI
- Caches constantes de std :: any para os tipos usados?
- Validação de futuros?
Criação de plugins
class myplugin : public micro::iplugin { public: myplugin(int ver, const std::string& nm):micro::iplugin(ver, nm) {
Download do 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; }
Veja exemplos mais detalhados na página do projeto.
Em vez de uma conclusão
Estou muito satisfeito por ler artigos informativos sobre o Habra no C ++ (e não apenas no C ++),
Espero que você ache este artigo interessante e pelo menos um pouco informativo.
Na minha humilde opinião, você pode usar lib in prod, deixe-os dar uma olhada em C ++ mais autoritativos e dizer a palavra, as fontes estão bem documentadas e não existem muitas - cerca de 1000 linhas.
Link para o projeto
microplugins