MFC CObject的使用
目录
- 1 从 CObject 派生类
- 1.1 使用基本 CObject 功能
- 1.2 添加运行时类信息
- 1.3 添加动态创建支持
- 1.4 添加序列化支持
- 2 访问运行时类信息
- 3 动态对象创建
1 从 CObject 派生类
- 在 CObject 的讨论中,经常使用术语“接口文件”和“实现文件”。 接口文件(通常称为头文件,或 .H 文件)包含类声明和使用该类所需的任何其他信息。 实现文件(或 .CPP 文件)包含类定义以及实现类成员函数的代码
- 从 CObject 派生类时,可以从四个级别的功能中进行选择:
1)基本功能:不支持运行时类信息或序列化,但包括诊断内存管理
2)基本功能加上对运行时类信息的支持
3)基本功能加上对运行时类信息和动态创建的支持
4)基本功能加上对运行时类信息、动态创建和序列化的支持 - 为重用而设计的类(以后将用作基类的类)至少应包括运行时类支持和序列化支持(如果预期将来有任何序列化需求)
- 通过在从 CObject 派生的类的声明和实现中使用特定的声明和实现宏来选择功能级别
1.1 使用基本 CObject 功能
//.h文件的声明class CSimple : public CObject{// add CSimple-specific members and functions...};
1.2 添加运行时类信息
- 头文件.h文件的声明
//.h文件的声明 class CPerson : public CObject {DECLARE_DYNAMIC(CPerson)// other declarations }; - 在类的实现文件 (.CPP) 中使用IMPLEMENT_DYNAMIC 宏
//此宏采用类的名称及其基类作为参数 IMPLEMENT_DYNAMIC(CPerson, CObject) - 始终将 IMPLEMENT_DYNAMIC 放在类的实现文件 (.CPP) 中。 IMPLEMENT_DYNAMIC 宏应在编译期间只计算一次,因此不应在接口文件 (.H),该接口文件可能包含在多个文件中
1.3 添加动态创建支持
- 从 CObject 类派生你的类
- 在类声明中使用 DECLARE_DYNCREATE 宏
- 定义没有参数的构造函数(默认构造函数)
- 在类实现文件中添加 IMPLEMENT_DYNCREATE 宏
1.4 添加序列化支持
- 从 CObject 类派生你的类
- 重写 Serialize 成员函数
如果直接调用 Serialize,即不希望通过多态指针序列化对象,请省略步骤 3 到 5 - 在类声明中使用 DECLARE_SERIAL 宏
- 定义没有参数的构造函数(默认构造函数)
- 在实现文件中使用 IMPLEMENT_SERIAL 宏
- “多态指针”指向类的对象(将其称为 A)或从 A 派生任何类的对象(例如 B)。 若要通过多态指针进行序列化,框架必须确定它正在序列化 (B) 的对象运行时类,因为它可能是从某些基类 (A) 派生的任何类的对象
2 访问运行时类信息
- 如果已从 CObject 派生类并使用了从 CObject 派生类一文中介绍的 DECLARE_DYNAMIC 和 IMPLEMENT_DYNAMIC、DECLARE_DYNCREATE 和 IMPLEMENT_DYNCREATE、或 DECLARE_SERIAL 和 IMPLEMENT_SERIAL 宏,则 CObject 类能够在运行时确定对象的具体类
- 使用 RUNTIME_CLASS 宏
CRuntimeClass *pClass = RUNTIME_CLASS(CObject);
- 使用 IsKindOf 函数: 可用于确定某个特定对象是否属于某个指定类或者是否派生自某个特定类,且确保类具有运行时类支持
class CPerson : public CObject
{DECLARE_DYNAMIC(CPerson)// other declarations
};
3 动态对象创建
- 在给定运行时类的情况下动态创建对象
CRuntimeClass* pRuntimeClass = RUNTIME_CLASS(CMyClass);
CObject* pObject = pRuntimeClass->CreateObject();
ASSERT(pObject->IsKindOf(RUNTIME_CLASS(CMyClass)));
- 在需要序列化或动态可创建性等功能时,可以从 CObject 派生一个类。 许多数据类需要序列化到文件中,因此,通常最好从 CObject 派生
- 从 CObject 类派生的开销是最小的。 派生的类仅继承四个虚函数和一个 CRuntimeClass 对象
相关文章:
MFC CObject的使用
目录1 从 CObject 派生类1.1 使用基本 CObject 功能1.2 添加运行时类信息1.3 添加动态创建支持1.4 添加序列化支持2 访问运行时类信息3 动态对象创建1 从 CObject 派生类 在 CObject 的讨论中,经常使用术语“接口文件”和“实现文件”。 接口文件(通常称…...
CNI 网络流量分析(六)Calico 介绍与原理(一)
文章目录CNI 网络流量分析(六)Calico 介绍与原理(一)介绍安装Calico-node初始化Calico-node 服务Felixconfdallocate-tunnel-addrsmonitor-addressesmonitor-tokenstatus-reporterbirdcalico-kube-controllersCNI 网络流量分析&am…...
机器视觉_HALCON_示例实践_1.检测圆形
文章目录一、引言二、检测圆形三、总结一、引言 前面的文(用户指南/快速向导)差不多已经把HALCON的基本内容讲完了,并且在学习过程中还跑过一个简单示例——在单一背景下定位回形针。示例跑过,顿时觉得自己行了,但如果…...
使用yolov5训练数据集笔记
准备工作 1. 安装labelimg labelimg:主要用于目标检测的目标框绘制,得到关于我们训练的边框位置、类别等数据 pip install labelimg2. 下载yolov5源码 我使用的是v7.0版本,直接下载即可,下载后解压出来 2.1 安装yolov5运行依赖包 进入…...
常用类详解(三)StringBuilder
(1)一个可爱的字符序列。此类提供一个与StringBuffer兼容的API,但不保证同步(StringBuilder不是线程安全的),该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类&#x…...
OpenCV 文字绘制----cv::putText详解
opencv中除了提供绘制各种图形的函数外,还提供了一个特殊的绘制函数——在图像上绘制文字。这个函数cv::putText()。 具体形式如下: void cv::putText( cv::Mat& img, // 待绘制的图像 const string& text, // 待绘制的文字 cv::Point origin…...
同IP多个端口域名同时进行目录爆破
背景 目录爆破是信息收集不可缺的一部分 在渗透过程中,扫描地址时发现同IP下存在多个端口,且每个端口均属于域名,仅仅端口号不同 需求 同一个IP下,同时收集多个不同端口的域名目录爆破进行信息收集,且简单便捷(一行代码) 用到的工具 gobuster 下载地址:https://…...
react+antd+Table里切换Switch改变状态onChange 传参
场景:table列表里面,操作用Switch切换状态。对应列改变操作在colums里面// 表格行const colums: ColumnsType<potentialType> [{title: useLocale(创建时间),dataIndex: creation_date,key: creation_date,align: center,render: (v: string, rec…...
《底层逻辑:看清这个世界的底牌》读后感
书名《底层逻辑:看清这个世界的底牌》作者刘润简介如果只教给你各行各业的“干货”(方法论),那只是“授人以鱼”,一旦环境出现任何变化,“干货”就不再适用。但如果教给你的是底层逻辑,那就是“…...
【2023】Prometheus-Blackbox_exporter使用
目录1.下载及安装blackbox_exporter2.修改配置文件设置监控内容2.1.使用http方式作为探测3.与prometheus集成4.导入blackbox仪表盘进行观测1.下载及安装blackbox_exporter 下载安装包 wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.23.0/black…...
嵌入式Linux学习经典书籍-学完你就是高手
很多刚入门的朋友一直都有人问我要学习资料,嵌入式实在太杂,网上很多人写的太不负责了,本书单综合了本人以及一些朋友多年的经验整理而成。 本人见识和阅读量有限,本书单可能有不对的地方,欢迎朋友指正,交…...
网络基础-基础网络命令
文章目录路由命令查询添加路由1.添加访问某台主机的静态路由2.添加访问某个网络的静态路由3.添加默认网关:删除设计关键字路由2参考路由 命令查询 通过 route --help 或man route 查询 添加路由 1.添加访问某台主机的静态路由 route add -host [目标主机IP地址…...
域对象共享数据
处理请求的过程:获取请求参数,调用service处理业务逻辑,往域对象中共享数据,最后实现渲染页面跳转。请求域中共享数据ModelAndView向request域对象共享数据ModelAndView:往域对象共享数据,并实现页面跳转和…...
【基于jeeSite框架】SpringBoot+poi+Layui自定义列表导出
文章目录功能效果思路代码前台后台easyPoi,easyExcel,poi三者的区别poipoi依赖导出ExcelHSSF方式导出XSSF方式导出SXSSF方式导出导入excelHSSF方式导入XSSF方式导入SXSSF方式导入easyPoi依赖包采用注解导出导入easyExcel依赖采用注解导出导入API文档easyPoi操作文档…...
使用 RGB 值设置颜色
使用 RGB 值设置颜色 另一种可以在 CSS 中表示颜色的方法是使用 RGB 值。 RGB 即红色、绿色、蓝色(英语:Red, Green, Blue)。 ● 红色(R)0 到 255 间的整数,代表颜色中的红色成分。。 ● 绿色(G…...
【python学习笔记】:5个高效编程技巧
01 交换变量 >>>a3 >>>b6 这个情况如果要交换变量在c中,肯定需要一个空变量。但是python不需要,只需一行,大家看清楚了 >>>a,bb,a >>>print(a)>>>6 >>&g…...
IP多播技术详解
文章目录前言IP多播技术的相关基本概念IP多播地址和多播组在局域网上进行硬件多播IP多播地址和多播MAC地址映射关系在因特网上进行IP多播网际组管理协议IGMP多播路由选择协议前言 随着计算机网络的发展和个人计算机的普及,人们能够方便的在网络上畅游,进…...
华为OD机试真题Python实现【数组排序】真题+解题思路+代码(20222023)
🔥系列专栏 华为OD机试(Python)真题目录汇总华为OD机试(JAVA)真题目录汇总华为OD机试(C++)真题目录汇总华为OD机试(JavaScript)真题目录汇总文章目录 🔥系列专栏题目输入输出示例一输入输出解题思路核心知识点Python 代码实现代码运行结果版权说明</...
丹麦市政当局通过 NetIQ 身份和访问管理解决方案,提高安全合规性
丹麦市政当局通过 NetIQ 身份和访问管理解决方案,提高安全合规性 概览 公司:普华永道 行业:咨询 地点:丹麦 挑战 创建一个通用框架,以便丹麦市政当局可以无需内部专业知识的前提下利用高级身份和访问管理 使用的…...
内网渗透学习官方文档
内网渗透0x00 kerberos协议0x01 ntlm协议0x02 管道0x03 smb协议0x04 windows访问控制0x05 令牌窃取0x06 SPN扫描&kerberoast0x07 黄金票据0x08 白银票据0x09 MS140680x10 NTDS.DIT && sam0x11 NTLM Relay0x12 MS08-0680x13 CVE-2019-13840x00 kerberos协议 kerber…...
AI率过高必看!4大核心方法+5款实用工具,SpeedAI真滴强!
现在各大AI检测机制越来越严格,不管是高校学生写毕业论文、职场人做方案汇报,还是自媒体输出原创内容,“AI检测率超标”都成了最头疼的问题——轻的要反复返工修改,严重的甚至会影响学分认定、项目评审结果。今天给大家整理了一套…...
Qt实战(五)——高性能图片浏览器的多线程优化
1. 为什么需要多线程优化图片浏览器 当你打开一个包含数百张高清图片的文件夹时,是否遇到过界面卡顿、滚动不流畅的情况?这背后其实是一个经典的性能问题——UI线程被耗时的图片加载操作阻塞了。 在传统的单线程实现中,图片加载、解码、缩略图…...
MusePublic模型解释性研究:注意力可视化分析工具开发
MusePublic模型解释性研究:注意力可视化分析工具开发 1. 引言 当我们看到一幅由AI生成的精美画作时,常常会好奇:模型到底是根据什么来创作这幅作品的?哪些部分吸引了它的注意力?又是如何做出每一个绘画决策的&#x…...
滤波实战:从原理到代码的平滑之旅
1. 滤波技术的前世今生 第一次接触滤波概念是在研究生时期做无人机姿态解算项目时。当时从陀螺仪和加速度计采集的原始数据跳得跟心电图似的,导师只说了一句"加个滤波器",却让我在图书馆泡了整整两周。现在回想起来,滤波本质上就是…...
ExplorerPatcher:如何用开源方案高效解决Windows 11界面定制难题?
ExplorerPatcher:如何用开源方案高效解决Windows 11界面定制难题? 【免费下载链接】ExplorerPatcher 提升Windows操作系统下的工作环境 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher Windows 11 24H2带来了全新的界面设计&…...
Keil5嵌入式开发场景联想:Cosmos-Reason1-7B辅助生成硬件驱动注释与调试思路
Keil5嵌入式开发场景联想:Cosmos-Reason1-7B辅助生成硬件驱动注释与调试思路 1. 引言:从嵌入式调试到AI辅助编程 如果你用过Keil5这类嵌入式开发工具,肯定对那种感觉不陌生:面对着一行行寄存器配置代码,或者一个复杂…...
工具链集成:规范驱动开发如何提升Python开发效率
工具链集成:规范驱动开发如何提升Python开发效率 【免费下载链接】spec-kit 💫 Toolkit to help you get started with Spec-Driven Development 项目地址: https://gitcode.com/gh_mirrors/sp/spec-kit 在现代Python开发中,如何平衡规…...
DeepSeek-OCR-2性能对比测试:CPU与GPU推理全解析
DeepSeek-OCR-2性能对比测试:CPU与GPU推理全解析 本文对DeepSeek-OCR-2在不同硬件配置下的性能进行全面测试,为实际部署提供数据支撑和方案建议 1. 测试背景与目的 DeepSeek-OCR-2作为新一代文档识别模型,凭借其创新的视觉因果流技术&#x…...
汽车零件分装报警系统(1)
这个项目是对汽车零件(机油滤芯)分装的时候编码进行警报,机器识别楚错误编码的时候会报警,编码使用正则表达式设置一个正确编码范围,摄像头连接警报器,使用paddleOCR和opencv相关技术,pyqt5设计…...
华为ModelEngine赋能HR:打造智能面试分析Agent的实战指南
1. 为什么HR需要智能面试分析Agent? 招聘工作对任何企业来说都是核心环节,但传统面试流程存在几个明显痛点:简历筛选耗时长、面试问题缺乏针对性、评估标准不统一、面试记录整理繁琐。这些问题直接影响了招聘效率和人才匹配度。 我去年帮一家…...
