EOS插件初始化机制讲解

EOS插件初始化机制讲解

EOS插件初始化采用的技术

      EOS插件初始化采用技术有C++多态技术、函数模板及代理设计模式。采用C++多态技术可以将所有插件存放在一类容器中进行迭代访问。函数模板使代码在编写代码时方便进行插件加载,为后续扩展奠定了基础。而采用代理设计模式和函数模板技术综合使用,使插件只需要满足模板接口即可,使插件功能扩展的性能更加强大。在EOS插件初始化中采用C11-14的新语法如变长的模板参数及vector新式初始化操作。

EOS插件的初始化步步跟踪

1、EOS插件初始化调用
插件初始化调用

      EOS插件初始代码使用了插件的类型作为了模板参数,且是变长模板参数,如果以后EOS要加载其它的插件,只需要把插件类型添加到模板参数即可。这段代码的意思是采用插件的类型去实例化application类中的initialize模板函数。

2、EOS插件初始化实现
template<typename... Plugin>
bool initialize(int argc, char** argv) {
    return initialize_impl(argc, argv, {find_plugin<Plugin>()...});
}

在这里首先要说明的是Plugin是个模板参数的名称,不是EOS代码中的插件类的父类。因为两都名称相同且含义有些相近,容易造成把模板名称与插件类的父类混淆。
在这里先将代码107行的模板展开的样子写出来,

bool initialize(int argc, char** argv) {
    return initialize_impl(argc, argv, {find_plugin<chain_plugin>(),
                                        find_plugin<http_plugin>(),
                                        find_plugin<net_plugin>(),
                                        find_plugin<producer_plugin>()});
}

这段代码展开主要用到了变长模板展开特性,以逗号分隔,逐个展开,整个花括号内部采用的vector的C++11-14的初始化语法。
find_plugin模板就是普通的模板替换,这个容易理解。在插件的实现上请参考《EOS插件继承机制讲解》博文,内部有详细描述。https://www.jianshu.com/p/dfcf86e17fca

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • eos项目(v1.0.9)主要可以分为以下八个模块:1.编译模块2.主程序模块3.依赖库模块4.插件模块5.智能合...
    vdes阅读 7,813评论 0 1
  • 开学的前一天8月19日我坐车去北京,在北京的地铁上我遇到了个小帅哥。他坐在我的斜对面,他老是看我,当然了我也总会以...
    AI如鹿切慕溪水阅读 2,767评论 0 0
  • @令人反省的一段话: 人们都知道桌子坏了用木头补,墙坏了用砖头补。可是身体坏了呢? 现实是: 大家都拿药来补...
    爱心客站阅读 825评论 0 0
  • 最近写移动端整理了一些入门级的知识,比较实用,如取消移动端的默认样式,取消点击表单后的延迟时间等,都是日常项目中碰...
    UIleader阅读 2,854评论 0 1