自定SERIAL 巨集給抽象類別使用

前两天编程正好遇到这个问题,找了半天没结果.无意中发现了下面的论述:)
摘自《深入浅出MFC》第8章Document-View 深入探討

p537
自定SERIAL 巨集給抽象類別使用
你是知道的,所謂抽象類別就是包含純虛擬函式的類別,所謂純虛擬函式就是只有宣告
沒有定義的虛擬函式。所以,你不可能將抽象類別具現化(instantiated)。那麼,
IMPLEMENT_SERIAL 展開所得的這段碼:
CObject* PASCAL class_name::CreateObject() { return new class_name; } 面對如果㆒個抽象類別class_name 就行不通了,編譯時會產生錯誤訊息。這時你得自行
定義巨集如:
#define IMPLEMENT_SERIAL_MY(class_name, base_class_name, wSchema) _IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, NULL) CArchive& AFXAPI operator>>(CArchive& ar, class_name* &pOb) { pOb = (class_name*) ar.ReadObject(RUNTIME_CLASS(class_name)); return ar; } 也就是,令CreateObject 函式為NULL,這才能夠使用於抽象類別之。

p525
#define IMPLEMENT_SERIAL(class_name, base_class_name, wSchema) CObject* PASCAL class_name::CreateObject() {return new class_name; } _IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, class_name::CreateObject) CArchive& AFXAPI operator>>(CArchive& ar, class_name* &pOb) {pOb = (class_name*) ar.ReadObject(RUNTIME_CLASS(class_name)); return ar; }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值