参赛作品
谁没有访问使用开放源代码库的想法: “感谢这些人提供的这个很棒的库! 总有一天,我会写点有价值的东西,并公开发布,以便其他人可以使用!”
是的,大家! 还是不?
随着C ++ 17标准的问世,我们的
得到了更快,更优雅的解决,您只需要实现您的想法,并能够将WG21员工沉迷于我们的好东西付诸实践。
? : #, )) ...
背景知识
插件的主题非常有趣,因为它允许您在不更改程序核心的情况下在软件(软件)中创建新功能,但是与此同时,应考虑并编写一个交互界面: Software <-> Plugins Manager <-> Plugins 。
由于没有完成测试任务的体系结构的复杂性,我在采访一家拥有自己的嵌入式系统插件系统的公司时有经验(未成功)。 从中继承基类的内部有很多宏,在使用此类解决方案时,很多事情会使程序员的日常生活变得灰暗...
在自我教育和阅读有关C ++ 17的文章时,决定在编写易于理解和易于使用的插件系统时巩固所获得的知识。
我做得有多好坏-亲爱的哈布罗维特,请审判你...
复习
图书馆特色
- 插件即服务(在单独的行业中运行)
- 自动卸载未使用的插件
优点
缺点
- 如果将新插件引入系统,则必须使用与下载该插件的管理员(以及libstdc ++)相同的编译器版本进行编译,以实现ABI兼容性
- 从std ::任何类型使用的常量缓存?
- 验证期货?
插件创建
class myplugin : public micro::iplugin { public: myplugin(int ver, const std::string& nm):micro::iplugin(ver, nm) {
下载插件
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; }
在项目页面上查看更多详细的示例。
而不是结论
我非常高兴阅读有关C ++(不仅限于C ++)上有关Habra的文章,
我希望您会发现这篇文章有趣并且至少可以提供一些信息。
以我的拙见,您可以在prod中使用lib,让他们看一看更权威的C ++并说出自己的话,它们的文献记录很好,而且来源不多-大约1000行。
链接到项目
微插件