C++实现根据类名动态生成类对象

2023-10-27

在开发后台服务的过程中,我们常常需要从数据库中取数据,并将数据缓存在本地中,另外,我们的服务还需要有更新数据的能力:包括定时的主动更新以及数据库数据更新时服务收到通知的被动更新。

之前在需要用到以上功能的时候,模仿着组内通用的数据Cache部分的代码来写,十分方便,基本上只需要自己写两个类:一个是取数据并缓存数据的类XXXData,一个是扇出数据的类XXXFetcher。

在需要使用数据的时候,通过:

FetcherFactory::getFetcher<XXXFetcher>()

即可获取一个XXXFetcher对象的指针。

查看FetcherFactory.h的备注:

/**
 * 配置中心, 存储各种配置, 会自动搜索项目中的Fetcher实现类, 加载, 并 
 * 在收到刷新配置的通知时调用update方法
 * 需要在服务器启动的onInitialize中调用本类的Initialize方法进行初始化
 */

重点:会自动搜索项目中的Fetcher实现类并加载。

也就是说,FetcherFactory可以自动地查找项目中的Fetcher实现类,然后动态地创建XXXFethcer对象。

什么叫动态创建呢?

就是能够根据一个类的名字动态地创建该类的对象。

举个例子,你的程序需要用到一个文本文件,而此文件中存放着一些类的名字,你能根据这些名字动态的生成这些类吗?

/*****************************************************************************/
/*从文件中读出类的名字存放在字符串变量szClassName中,现在假设读出的字符串为 */
/* ”CString”,而类CString派生自CObject,那么我们可以用基类指针指向派生类 */
/***********************************/********************
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++实现根据类名动态生成类对象 的相关文章

  • OpenCv读/写视频色差

    我试图简单地使用 openCV 打开视频 处理帧并将处理后的帧写入新的视频文件 我的问题是 即使我根本不处理帧 只是打开视频 使用 VideoCapture 读取帧并使用 VideoWriter 将它们写入新文件 输出文件看起来比输入更 绿
  • 为什么我不能用 `= delete;` 声明纯虚函数?

    Intro 纯虚函数使用通用语法声明 virtual f 0 然而 自 c 11 以来 有一种方法可以显式地传达non existence 特殊 成员函数的 Mystruct delete eg default constructor Q
  • Clang 编译器 (x86):80 位长双精度

    我正在尝试在 x86 Windows 平台上使用本机 80 位长双精度 海湾合作委员会选项 mlong double 80 https gcc gnu org onlinedocs gcc x86 Options html似乎不适用于 cl
  • 构造函数中显式关键字的使用

    我试图了解 C 中显式关键字的用法 并查看了这个问题C 中的explicit关键字是什么意思 https stackoverflow com questions 121162 但是 那里列出的示例 实际上是前两个答案 对于用法并不是很清楚
  • JSON 数组到 C# 列表

    如何将这个简单的 JSON 字符串反序列化为 C 中的列表 on4ThnU7 n71YZYVKD CVfSpM2W 10kQotV 这样 List
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • 如何将“外部模板”与由同一类中的模板化成员使用的嵌套类一起使用?

    首先 一些背景信息 我尝试以 Herb Sutter 在他的解决方案中介绍的方式使用 Pimpl 习语 得到了 101 http herbsutter com gotw 101 这在头文件中看起来像这样 include pimpl h h
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 为什么我不应该对不是由 malloc() 分配的变量调用 free() ?

    我在某处读到 使用它是灾难性的free删除不是通过调用创建的对象malloc 这是真的 为什么 这是未定义的行为 永远不要尝试它 让我们看看当您尝试时会发生什么free 自动变量 堆管理器必须推断出如何获取内存块的所有权 为此 它要么必须使
  • 通过 NHibernate 进行查询,无需 N+1 - 包含示例

    我有一个 N 1 问题 我不知道如何解决它 可以在这个问题的底部找到完全可重复的样本 因此 如果您愿意 请创建数据库 设置 NUnit 测试和所有附带的类 并尝试在本地消除 N 1 这是我遇到的真实问题的匿名版本 众所周知 这段代码对于帮助
  • 当“int”处于最大值并使用 postfix ++ 进行测试时,代码定义良好吗?

    示例 未定义行为的一个示例是整数溢出的行为 C11dr 3 4 3 3 int溢出是未定义的行为 但这是否适用于存在循环的以下内容 并且不使用现在超出范围的副作用i 特别是 这是否后缀增量规格帮助 结果的值计算在副作用之前排序 更新操作数的
  • 当我“绘制”线条时,如何将点平均分配到 LineRenderer 的宽度曲线?

    我正在使用线条渲染器创建一个 绘图 应用程序 现在我尝试使用线条渲染器上的宽度曲线启用笔压 问题在于 AnimationCurve 的 时间 值 水平轴 从 0 标准化为 1 因此我不能在每次添加位置时都在其末尾添加一个值 除非有一个我不知
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • 我在在线程序挑战编译器中遇到演示错误

    include
  • 双精度类型二维多维数组的 pinvoke 编组作为 c# 和 c++ 之间的输入和输出

    我有以下我正在尝试解决的双物质类型的 2d 多维数组的 c 和 c pinvoke 编组 我已经查看了以下热门内容以获得我目前拥有的内容使用双精度数组进行 P Invoke 在 C 和 C 之间编组数据 https stackoverflo
  • 使用 CSharpCodeProvider 类编译 C# 7.3 的 C# 编译器版本是什么?

    我想使用 Microsoft CSharp CSharpCodeProvider 类来编译 C 7 3 代码 编译器版本在 IDictionary 中指定 在创建新的 CSharpCodeProvider 时将其作为输入 例如 Compil
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder

随机推荐

  • React路由

    安装 npm i react router dom S 导入 import BrowserRouter as Router Route Link from react router dom HashRouter与BrowserRouter
  • iOS基础教程-SQLite数据库操作(二简单实例学生信息增删改查数据库操作)

    学生名单管理界面实现数据库的增删改操作 关于UI部分 我们使用storyboard简单完成 在上一篇文章中有详细的描述iOS基础教程 SQLite数据库操作 一 StoryBoard操作 SQLite操作前准备工作 本篇结束以后 就可以完成
  • webpack设置分包

    Webpack中设置分包 code splitting 是一种优化技术 它允许将你的代码分割成多个小块 以便在不同的页面或情境中按需加载 这可以显著减小初始加载的资源大小 提高网页性能 Webpack提供了几种方式来设置分包 其中最常见的是
  • 搞懂 API ,地图 API 制作方法分享

    地图 API 是一种基于 Web 开发的应用程序编程接口 可以用于创建和展示地图及地理信息 以下是一些地图 API 制作的方法 选择地图 API 平台 目前市场上有很多地图 API 平台供选择 比如 Google Maps API 百度地图
  • WorkTool企微机器人自动接收图片回传(方案三)

    自动接收图片并上传到服务器 仅适用企业微信应用 前言 WorkTool企微机器人可以接收客户群的消息 但接收图片一直是个问题 前面也介绍过两种图片接收方案 但都会影响运行效率 并且不能达到100 的图片接收率 实测95 本方案三是通过企微官
  • 2023年测试之路,从功能测试进阶测试开发工程师,突破内卷...

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • QT5.9.6和VS2015的配置使用

    要做界面但是MFC实在是 所以果断尝试QT实现界面化 QT5 9 6 VS2015 opencv2 4 13 所用软件 QT5 9 6 VS2015 参考地址 Qt5 7 VS2015 环境搭建https blog csdn net lia
  • kafka常用命令汇总

    新建topic bin kafka topics sh zookeeper localhost 2181 create replication factor 1 partitions 1 topic test service 删除topic
  • Qt发送端用自定义结构体发送,接收端QByteArray接收

    Qt TCP UDP 一端用自定义结构体发送消息 一端用QByteArray接收消息 用自定义结构体发送消息 void TcpServer timeOut QDateTime nowTime QDateTime currentDateTim
  • select top语句 mysql_SQL SELECT TOP 语句

    SELECT TOP 子句用于规定要返回的记录的数目 SELECT TOP 子句对于拥有数千条记录的大型表来说 是非常有用的 注释 并非所有的数据库系统都支持 SELECT TOP 子句 SQL Server MS Access 语法 SE
  • SSE3和SSSE3 Intrinsics各函数介绍

    SIMD相关头文件包括 include
  • string类常见用法

    需要包含头文件和命名空间 include
  • Linux高级命令05:压缩和解压缩命令

    学习目标 能够使用tar命令完成文件的压缩和解压缩 1 压缩格式的介绍 Linux默认支持的压缩格式 gz bz2 zip 说明 gz和 bz2的压缩包需要使用tar命令来压缩和解压缩 zip的压缩包需要使用zip命令来压缩 使用unzip
  • mysql连接中的Access denied for user ‘root’@‘localhost’ 和Unknown database问题解决

    1 端口端口 看看是否3306有被占用 主要原因 2 密码加双引号试试 3 unknown database的时候 一定看看服务中是否有其他的mysql服务在运行 要关掉其他的
  • STM32G030Cx HAL库Flash擦除或编程操作出错的解决办法

    STM32G030Cx HAL库Flash擦除与编程操作 例程说明 一 宏定义及变量 二 获取页 三 写数据 双字 四 调用验证 例程说明 STM32G0芯片对Flash操作容易出错 经常出现擦除失败或编程失败的情况 故有此记录 STM32
  • Jetbrains系列开发工具日常配置与使用

    文章目录 IntelliJ IDEA 各种常用配置 常见问题 PyCharm 常见问题 IntelliJ IDEA IDEA的确是Java开发利器 之前一直用Eclipse 后来实习单位都用IDEA 就慢慢转了 开始还不习惯 后来就不禁被其
  • 3.1 ZK客户端创建节点源码解析上(基于NIO)

    ZK客户端创建节点源码解析上 前言 1 为什么能用来做注册中心 2 创建节点 2 1 ZooKeeper create 方法 2 2 ClientCnxn queuePacket 方法 2 3 ClientCnxnSocketNIO doT
  • 1003 我要通过 (20 分)

    题目 题目链接 题解 实现题 理解题目表达的意思 字符串中必须仅有 P A T 这三种字符 不可以包含其它字符 可以在 PAT 左右两侧加任意个相同数量的 A 比如 PAT APATA AAPATAA 均是正确的 但 APAT PATA A
  • 比较删除某个变量后的模型与原模型的差异(使用F检验,R语言)

    比较删除某个变量后的模型与原模型的差异 使用F检验 R语言 在统计建模中 我们经常需要评估不同变量对模型的影响程度 其中一个常见的问题是 当我们删除某个变量后 模型的性能是否会发生显著变化 为了回答这个问题 我们可以使用F检验来比较删除某个
  • C++实现根据类名动态生成类对象

    在开发后台服务的过程中 我们常常需要从数据库中取数据 并将数据缓存在本地中 另外 我们的服务还需要有更新数据的能力 包括定时的主动更新以及数据库数据更新时服务收到通知的被动更新 之前在需要用到以上功能的时候 模仿着组内通用的数据Cache部