Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么一个可序列化的类必须有从类名中获取实例的函数?

为什么一个可序列化的类必须有从类名中获取实例的函数?
EN

Stack Overflow用户
提问于 2013-06-22 03:17:22
回答 1查看 598关注 0票数 0

例如mfc,它应该添加

代码语言:javascript
运行
AI代码解释
复制
DECLARE_SERIAL(CGraph)

如果我有一节课,

代码语言:javascript
运行
AI代码解释
复制
class A
{
    int a,b;
};

我可以将a和b的值存储到一个文件中,然后读取它。所以我不明白为什么DECLARE_SERIAL(CGraph)要用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-22 09:02:55

只有您希望使用IMPLEMENT_SERIAL提供的框架以多态方式序列化从CObject派生的类,才需要MFC和MFC宏。

如果您的类不是从CObject派生的,并且/或者您不希望以多态方式使用MFC的序列化(即通过指向CObject的指针),那么您当然可以实现您自己的解决方案,正如您所说的那样。

例如,DECLARE_SERIAL(CMyClass)扩展为类声明中的以下代码

代码语言:javascript
运行
AI代码解释
复制
protected: 
    static CRuntimeClass* __stdcall _GetBaseClass(); 
public: 
    static CRuntimeClass classCMyClass; 
    static CRuntimeClass* __stdcall GetThisClass(); 
    virtual CRuntimeClass* GetRuntimeClass() const; 
    static CObject* __stdcall CreateObject();  
    friend CArchive& __stdcall operator>>(CArchive& ar, CMyClass* &pOb);

并且IMPLEMENT_SERIAL(CMyClass, CObject, VERSIONABLE_SCHEMA | 1)展开为cpp文件中的以下代码

代码语言:javascript
运行
AI代码解释
复制
CObject* __stdcall CMyClass::CreateObject() 
{ 
    return new CMyClass; 
} 

extern AFX_CLASSINIT _init_CMyClass; 

CRuntimeClass* __stdcall CMyClass::_GetBaseClass() 
{ 
    return (CObject::GetThisClass()); 
}

__declspec(selectany) CRuntimeClass CMyClass::classCMyClass = 
{ 
    "CMyClass", sizeof(class CMyClass), (0x80000000) | 1, 
    CMyClass::CreateObject, &CMyClass::_GetBaseClass, 0, &_init_CMyClass 
}; 

CRuntimeClass* __stdcall CMyClass::GetThisClass() 
{ 
    return ((CRuntimeClass*)(&CMyClass::classCMyClass)); 
} 

CRuntimeClass* CMyClass::GetRuntimeClass() const 
{ 
    return ((CRuntimeClass*)(&CMyClass::classCMyClass)); 
} 

AFX_CLASSINIT _init_CMyClass((CMyClass::GetThisClass())); 

CArchive& __stdcall operator>>(CArchive& ar, CMyClass* &pOb) 
{ 
    pOb = (CMyClass*) ar.ReadObject((CMyClass::GetThisClass())); 
    return ar;
}

因为它是says in MSDN的,所以不使用上面的宏也可以使用序列化:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17247019

复制
相关文章
设置输入延时约束
这是一个经典的时序分析模型,上游芯片将时钟发送给FPGA,对于内部同步元件之间的可以使用create_clock进行约束,对于外部芯片发送数据通过FPGA端口到达FPGA内部第一级接受触发器使用set_input_delay进行约束,对于FPGA的末级触发器通过端口到达下游芯片使用set_output_delay进行约束。输入端口到输出端口的组合逻辑使用set_max_delay进行约束。 图中trace_delay指的是板级延迟,输入延迟指的是上游芯片的时钟沿发出数据到FPGA接收到数据所需的时
瓜大三哥
2018/02/24
2.5K0
设置输入延时约束
iOS从Xib中设置样式
iOS在写视图的有的人喜欢纯代码去写,从之前的绝对定位方式(Frame),到现在的自动布局(Autolayout),但这种方式的好处是便于复制修改和装X,但是缺点是代码不容易看,不便于修改
码客说
2019/10/22
2.4K0
【已解决】Xcode 9对于 Fastlane 打包成功无法Export iPA
【已解决】Xcode 9对于 Fastlane 打包成功无法Export iPA 问题描述 最近打包系统一直走在导出 iPA 的时候就错误了。出现了证书错误。 29E2BFAA-FAA9-40D6-A
君赏
2018/09/07
1K0
WebGL或OpenGL关于模型视图投影变换的设置技巧
看了不少的关于WebGL/OpenGL的资料,笔者发现这些资料在讲解图形变换的时候都讲了很多的原理,然后举出一个特别简单的实例(坐标是1.0,0.5的那种)来讲解。确实一看就懂,但用到实际的场景之中就一脸懵逼了(比如地形的三维坐标都是很大的数字)。所以笔者这里结合一个具体的实例,总结下WebGL/OpenGL中,关于模型变换、视图变换、投影变换的设置技巧。
charlee44
2022/05/05
1.1K0
WebGL或OpenGL关于模型视图投影变换的设置技巧
或对,或错?
公号许久没更文了,这段时间以来,自己在面临着一些抉择。未曾想过,毕业后一个月考虑的事情比大学四年加起来的还要多。也许是大学过得太安逸了,欠的债全部攒到毕业后来还。
Python技术与生活认知的分享
2018/09/30
4710
或对,或错?
Oracle 基础--【表空间与表】【约束】【视图】
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
颍川
2019/11/21
8810
设置Xcode自动管理证书文件
许多的开发者依然维护着旧的项目,他们也许需要选择一个证书签名去编译。这个问题讨论怎么在Xcode设置来自动化选择证书通过他们默认的设置,这个问题适用于IOS和MAC的开发人员
君赏
2018/08/31
3.3K0
设置Xcode自动管理证书文件
对复制实施主键约束
在本文中,我们介绍一个配置选项,该选项控制复制通道是否允许创建没有主键的表。这延续了我们最近在复制安全性方面的工作,在该工作中,我们允许用户强制执行权限检查和/或强制执行基于行的事件。
MySQLSE
2020/09/28
9430
对复制实施主键约束
【IOS开发基础系列】Autolayout自动布局专题
        bounds是指这个view在它自己坐标系的坐标和大小 而frame指的是这个view在它superview的坐标系的坐标和大小区别主要在坐标系这一块。很明显一个是自己为原点的坐标系,一个是以屏幕为原点的坐标系。
江中散人_Jun
2023/10/16
3990
【IOS开发基础系列】Autolayout自动布局专题
Xcode中和symbols有关的几个设置
其实被这个问题困扰了好久,不过秉承着三分钟热度的新年新气象,还是要多弄懂一点(⊙_⊙)ゞ
且行且珍惜_iOS
2022/05/13
2.1K0
Xcode中和symbols有关的几个设置
【约束布局】ConstraintLayout 之 Chains 链式约束 ( Chains 简介 | 代码 及 布局分析 | 链头设置 | 间距设置 | 风格设置 | 权重设置 )
Chains 创建后 代码 及 样式 : 下图是 官方配图 , 表示一个 最小的 链 , 只有两个 控件 , 控件两端 约束于 父控件 , 控件之间 互相约束 ;
韩曙亮
2023/03/27
3.8K0
【约束布局】ConstraintLayout 之 Chains 链式约束 ( Chains 简介 | 代码 及 布局分析 | 链头设置 | 间距设置 | 风格设置 | 权重设置 )
xcode7中KSImageNamed-Xcode-master插件无法使用问题的解决
Xcode 升级到7之后VVDocumenter-Xcode,OMColorSense,KSImageNamed等一系列的插件失效的解决办法,以及不小心误点了 Skipbundle 的解决办法。
用户1451823
2018/09/13
9960
xcode7中KSImageNamed-Xcode-master插件无法使用问题的解决
xcode 8.0 导致rn无法运行解决办法
Ignoring return value of function declared with warn_unused_result attribute
conanma
2021/05/10
8410
MyLayout和XIB或SB的混合使用方法
MyLayout是一个可以非常简单和方便的实现各种界面布局的第三方开源库。在我的github项目中大部分DEMO都是通过代码来实现界面布局的,但这并不是表示MyLayout不支持XIB和SB。 在构建一个应用的MVC框架中,我们希望模型、视图、控制这三部分都尽可能的低耦合,而苹果推荐的视图部分构建则是通过XIB或者SB来完成的。因为MyLayout中的各种布局视图类其实都是从UIView派生的,因此MyLayout是完全可以和XIB以及SB混合使用的。 MyLayout的一些布局视图属性以及子视图的扩展布局属性是可以在XIB或者SB界面编辑器里面进行设置的。唯一的一个缺点是这些属性的设置不能起到所见即所得的效果。 因为MyLayout是一个独立而完整的界面布局框架,因此您可以和系统默认的AutoLayout混合使用,也可以完全独立的单独使用。
欧阳大哥2013
2018/08/22
9190
MyLayout和XIB或SB的混合使用方法
【说站】mysql主键约束的设置
UNIQUE 和 PRIMARY KEY 的区别:一个表可以有多个字段声明为UNIQUE,但只能有一个 PRIMARY KEY声明。
很酷的站长
2022/11/23
2.8K0
WWDC 2018年十大视频评论
现在,“ 开发人员Triceraptus ” 的年度迁移已经结束,WWDC 2018包装已经从圣何塞的McEnery会议中心落下帷幕,我们还剩下另一系列令人信服的会议视频。
iOSDevLog
2018/08/22
3.5K0
WWDC 2018年十大视频评论
mysql 设置外键约束(foreign key)
建立外键约束可以采用列级约束语法和表级约束语法,如果仅仅对单独的一个数据列建立外键约束,则使用列级约束语法即可;如果需要对多个列组合创建外键约束,或者需要为外键约束指定名字则必须使用表级约束语法。
全栈程序员站长
2022/06/25
5.6K0
WWV 2018年十大必看视频
我们汇集了十大WWDC 2018视频列表,涵盖了您需要知道的一切,包括Core ML,Siri Shortcuts,ARKit 2等等!
iOSDevLog
2018/10/10
3.1K0
WWV 2018年十大必看视频
怎么设置ie兼容性视图设置_ie浏览器兼容性视图怎么设置
通过域策略和用户配置文件,设定IE的兼容性视图后,新发放虚拟机兼容性视图设置没有效果
全栈程序员站长
2022/10/04
2.9K0
怎么设置ie兼容性视图设置_ie浏览器兼容性视图怎么设置
mysql 取消外键约束_主键约束和外键约束什么意思
解决方法是在Mysql中取消外键约束: SET FOREIGN_KEY_CHECKS=0;
全栈程序员站长
2022/11/01
6.9K0
mysql 取消外键约束_主键约束和外键约束什么意思

相似问题

无法为重复视图设置约束(Xcode 11.0)

123

解开或关闭视图控制器不工作。Xcode 6.4

122

iOS: layoutIfNeeded似乎不能在约束更改后更新视图(Xcode6.4,Swift 1.2)

10

XCode 6.4提交

11

无法用Xcode 6.4构建核心图

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档