BOOST_CLASS_EXPORT

本文介绍了C++ Boost库中的BOOST_CLASS_EXPORT宏及其用途。通过示例,解释了如何使用该宏来注册派生类,以便在序列化过程中能够正确处理未实例化的派生类。同时提到了BOOST_CLASS_EXPORT_IMPLEMENT(T)宏,它与register_type宏有类似功能,用于实例化未被引用的代码,并将类与外部标识符关联,确保序列化过程的顺利进行。
摘要由CSDN通过智能技术生成
用基类的指针去转存派生类时除了上一篇 boost::serialization 用基类指针转存派生类(错误多多,一波三折)之外,还有另一种更简单的方法:
用BOOST_CLASS_EXPORT宏。下面我们来分析怎样用BOOST_CLASS_EXPORT来实现
用基类的指针去转存派生类。

首先来看前面实例的一段代码:

void save()
{
	std::ofstream ofs("t7.xml");
	boost::archive::xml_oarchive oa(ofs);
	student_info* sdinfo = new middle_student("wyp", "0099", "1", 15);
	oa << BOOST_SERIALIZATION_NVP(sdinfo);//#1
	delete sdinfo;
}
当程序执行到#1时就会抛出异常: boost::archive::archive_exception at memory location 0x0017eb30...

boost文档解释是派生类没有实例化(这里是个人理解。。。。“实例化”到底什么意思也不太理解。。。)。

当我们在#1前面加上注册的代码时

oa.template register_type<middle_student>(NULL);
实际上就相当于“实例化”,看看register_type的实现代码:

 template<class T>
    const basic_pointer_oserializer * 
    register_type(const T * = NULL){
        const basic_pointer_oserializer & bpos =
            boos
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值