当前位置: 首页 > 软件库 > 程序开发 > 常用工具包 >

Modular

C++模块管理
授权协议 MIT
开发语言 C/C++
所属分类 程序开发、 常用工具包
软件类型 开源软件
地区 国产
投 递 者 贺光华
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

我在实际工作中发现很多类和模块是非常独立和相似的:它们一般都需要有初始化和反初始化的过程。一般做法是在程序初始化的位置对这些类和模块进行集中配置。比如程序中有ModuleA、ModuleE、ModuleF这三个模块,而且这三个模块之间有依赖顺序ModuleE<ModuleF<ModuleA,这时候的初始化过程就是:
ModuleE.Init();
ModuleF.Init();
ModuleA.Init();
如果模块很多,这种初始化过程就显得非常乏味。那么我们又没有更好的办法解决这个问题呢?这就是该项目给出的答案!

Modular能够自动收集C++项目中那些独立的模块,并提供统一的初始化入口。还是上面的那个问题,如果用Modular来解决你只需要做以下几件事情:

在模块ModuleE的实现文件中加入当前模块的注册信息:

#include "SelfModule.h"
#include "TypeSelect.h"
#include "Modular.h"

/**
* 定义当前模块
*/
static DefModule _Module("ModuleE"
#ifdef Mod_Config
    , "ModuleF;"
#else
    ,""
#endif
    , []$(Initializer)(){
        printf("ModuleE::Initializer()\n");
    }
    , []$(Uninitializer)(){
    printf("ModuleE::Uninitializer()\n");
    });

在模块ModuleF的实现文件中加入当前模块的注册信息:

#include "SelfModule.h"
#include "TypeSelect.h"
#include "Modular.h"

/**
 * 定义当前模块
 */
static DefModule _Module("ModuleF"
#ifdef Mod_Config
    , "ModuleA;"
#else
    ,""
#endif
    , []$(Initializer)(){
        printf("ModuleF::Initializer()\n");
    }
    , []$(Uninitializer)(){
        printf("ModuleF::Uninitializer()\n");
    });

在模块ModuleA的实现文件中加入当前模块的注册信息:

#include "SelfModule.h"
#include "TypeSelect.h"
#include "Modular.h"

/**
 * 定义当前模块
 */
static DefModule _Module("ModuleA"
    ,""
    , []$(Initializer)(){
        printf("ModuleA::Initializer()\n");
    }
    , []$(Uninitializer)(){
        printf("ModuleA::Uninitializer()\n");
    });

当你对每一个独立的模块进行注册后,就可以在应用初始化的位置使用一句话完成注册过程:

SelfModuleList::GetInstance()->Inits();

SelfModuleList::GetInstance()->Uninits();
 相关资料
  • 一、简介 V9系统可以自定义开发模块(详情请参考V9二次开发指南)。可对模块的安装,卸载等管理。 二、功能演示 1.安装 将已经创建好的模块放在指定位置,运行后台后,在“模块管理”处会找到你创建的模块。如下图: 如模块配置和代码无问题,系统将提示安装成功,否则提示错误。安装成功后你就可以使用该模块了(详情请参考V9二次开发指南)。 2.卸载 安装后的模块如果你不需要,可进行卸载。如下图:

  • 一、简介   “模块管理"用于用户管理系统自带或者用户自定义开发模块的设置以及配置的等。这里且说系统自带。 二、功能演示 表单向导 广告 新闻心情 短消息 投票 友情链接 评论 公告 模块管理 全站搜素 数据源 点评模块 物流模块 在线充值 短信平台 外部数据导入 手机门户

  • 用户管理 当多级审核关闭后系统并不会自动将角色为执行人的用户重置角色,请自行重置相应用户角色。 数据库管理 所有添加的数据源应在添加之前点击测试连接按钮进行连接性测试,保证连接性。 数据源分为查询数据源/非查询数据源/读写数据源。查询数据源仅会出现在细粒度权限的查询数据源范围内。非查询数据源同理。(对于查询与执行数据源应拆分为二,保障线上执行数据源不会因为查询慢sql影响业务)默认为读写数据源。此

  • 发一个项目当中管理UIAlerView,相当好用的模块。 可以无缝整合到当前项目中,不需要其他依赖。 在开发过程中遇见过这样的问题: 比如说 当前屏幕已有一个UIAlerView提示, 不希望其他的UIAlerView 提示覆盖, 而是等当前的UIAlerView提示处理完,在去显示其他的信息。 这里封装了一个 UIAlerView 管理器, 管理器是用队列实现的。 可以将自己的UIAlerVie

  • 所有发布在npm上的模块,都可以在自己的npm主页上看到。 但是如果想要更为直观的管理,可以通过一个名为badgeboard的工具来浏览。 对于npm的模块,已经有很多成熟的服务,方便开发者了解自己的模块状态。 正如上图中所示,常用的服务有: 持续集成:travis 测试覆盖:coveralls 查看模块依赖:david-dm 这些工具都可以非常好的帮助你管理自己的npm模块、了解模块的状态。 例

  • 概述 数码管模块采用四位共阳极数码管,用于显示数字和少数特殊字符。可以在机器人项目中使用该模块,用于显示速度、时间、分数、温度、距离等传感器的值。同时,Makeblock 提供易于编程的 Arduino 库,使用户能够方便地控制数码管。本模块接口是蓝色色标,说明是双数字口控制,需要连接到主板上带有蓝色标识接口。 技术规格 工作电压:5V DC 数字位数:4 工作温度:-40到85℃ 控制方式:双数

  • 主要内容:内核模块保存位置与模块保存文件,内核模块的查看,内核模块的添加与删除Linux 的内核会在启动过程中自动检验和加载硬件与文件系统的驱动。一般这些驱动都是用模块的形式加载的,使用模块的形式保存驱动,可以不直接把驱动放入内核,有利于控制内核大小。 模块的全称是 动态可加载内核模块,它是具有独立功能的程序,可以被单独编译,但不能独立运行。模块是为内核或其他模块提供功能的代码集合。这些模块可以是 Linux 源码中自带的,也可以是由硬件厂商开发的(可以想象成驱动)。不过内

  • 嗨,我是prestashop的新手,我尝试创建一个1.7版的管理模块。我会创建一个新的菜单来显示模板和管理我的数据库。 mymodule.php: 模块/mymodule/controller/admin/MyModuleController。php: 模块/mymodule/views/templates/admin/mymodule。第三方物流: 我用很多教程1.7/1.6的编译创建了这个,但