C++如何动态的加载类?

Italink 2019-12-19 06:50:49
我打个比方描述一下我的问题哈
比如我定义了一个基类 Person,然后派生一些子类比如Student,Teacher,Police...等等的一些职业
我想把这些子类存储到“文件”中
然后当我程序运行的时候,再动态的扫描有哪些子类,选择其中一个,创建相应的对象。
原来没接触过这个。
请问是用dll吗..
...全文
477 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
钟眞龙 2020-12-14
  • 打赏
  • 举报
回复
C#可以做到这个
Italink 2019-12-19
  • 打赏
  • 举报
回复
引用 6 楼 寻开心 的回复:
这里说序列化引用它的概念。 序列化可以是一个操作符, 把数据变成字节流后文件输出也好, 控制输出也罢,都可以使用 原来以为是面对内存到磁盘的存储关系呢, 才提出这个词儿
好的,我先摸索一下,有问题再问您
寻开心 2019-12-19
  • 打赏
  • 举报
回复
这里说序列化引用它的概念。
序列化可以是一个操作符, 把数据变成字节流后文件输出也好, 控制输出也罢,都可以使用

原来以为是面对内存到磁盘的存储关系呢, 才提出这个词儿
Italink 2019-12-19
  • 打赏
  • 举报
回复
引用 4 楼 寻开心 的回复:
还有一个问题就是序列化之后没存储函数
寻开心 2019-12-19
  • 打赏
  • 举报
回复
那就要对类做标记, 读取到这个标记,就能知道是什么类,进而才创建对应的类的内存对象和加载数据
如何设置这个标记,可以自己决定
前面说过,在基类设置一个type类型数据,所有不同的子类type值不同,其实也就是这个意思
那不是唯一的办法
你也可以就比如说,你的文件当中完全可以这样:
classType = “警察”
data = 若干数据,记录警察信息

classType=“学生”
data = 若干数据,记录学生信息
程序扫描文件,查找classType 这个关键词, 然后识别后面的标志, 从而决定如何加载数据

也可以仿照xml/jason文件的那种格式设计出层级关系和列表关系等等
Italink 2019-12-19
  • 打赏
  • 举报
回复
引用 1 楼 寻开心 的回复:
就这个文件有点像脚本,可以用来处理一些数据
Italink 2019-12-19
  • 打赏
  • 举报
回复
引用 1 楼 寻开心 的回复:
十分感谢您的回复! 但是试了一下,序列化并不能解决我的问题。 是这样的,我程序并不清楚具体有哪些子类,要等运行的时候,先扫描路径。再确定有哪些, 我上面定义的职业类,是想实现类似于“生成器”,比如警察生成器,用来创建警察,学生生成器,用来创建学生。 我想将之存储,是为了便于扩展,当我需要增加某个职业时,只需写一个该职业的“生成器文件”,放在我的资源路径下,程序运行的时候可以动态的装载这些子类生成器。通过生成器,可以创建这个职业 不知道能不能实现
寻开心 2019-12-19
  • 打赏
  • 举报
回复
c++里面的序列化啊

在基类当中定义一个比如说SaveLoad函数, 用于把内容存储和加载
继承类全部重载这个函数,先调用基类的存储,再实现自己的数据的存储
Save按照什么顺序和格式存,Load按照什么顺序和格式来提取
在基类当中, 可以定义一个属性type, 每个继承类都有一个独立的type值, 保存的时候最先存储它,读取后根据type值来创建不同的基类

其实这个事情放开了想,核心是你的场景/内存管理的组织的问题
如何把内存的结构完整的保存磁盘,再从磁盘加载还原的过程

文件的格式可以是二进制的,也可以是文本的,各有各的好处
为了识别这是你自己的文件类型,除了在文件扩展名上想办法外,还要在文件内容上加上一些特殊的标志,一般放在文件最开始的地方
其实,你只要找找一个写开放的文件格式就能明白

整个内存结构你是如何组织的, 为整个内存结构里面所有需要存储的对象都建立一个公共的基类,在基类里面定义那个SaveLoad函数,其他所有需要存储的都继承并重载这个函数,从而实现统一化的存储

所以文件的格式是一个文件头, 定义文件的独特标志,记录文件格式的版本,记录版权,等等一些信息
而后是内存格式的磁盘存储数据 。 例如,最典型的文件格式是bmp图片格式,它的磁盘文件结构,可以去研究,很简单,但是很典型

场景/内存结构如何组织,每个应用都是不同的,完全看自己的设计
就是从main/winmain之类的函数开始起,如何加载数据,如何组织数据, 磁盘存储只是其中的一个子过程而已

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧