【发布时间】:2014-02-09 18:09:14
【问题描述】:
我有一个虚拟模板类和一个派生类。我现在正在尝试对派生类使用 boost::serialisation。到目前为止,这是我的代码:
template <class T> class classOne {
public:
classOne(){};
classOne(T val) : st(val){};
virtual ~classOne() {};
virtual double GetError() =0;
protected: T st;
private:
friend class boost::serialization::access;
template<class archive>
void serialize(archive& ar, const unsigned int version)
{
ar & BOOST_SERIALIZATION_NVP(st);
}
};
BOOST_SERIALIZATION_ASSUME_ABSTRACT(classOne<double>);
template <class T> class classTwo : public classOne<T>
{
public:
classTwo() : classOne<T>(1.0), error(0){};
classTwo(T val) : classOne<T>(val), error(val){};
virtual T GetError() {return error;};
private:
T error;
friend class boost::serialization::access;
template<class archive>
void serialize(archive& ar, const unsigned int version)
{
ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(classOne<T>);
ar & BOOST_SERIALIZATION_NVP(error);
}
};
int main(int argc, char** argv){
classTwo<double> ch2(0.5);
std::ofstream ofs2("test2.xml");
boost::archive::xml_oarchive oa2(ofs2);
oa2 << BOOST_SERIALIZATION_NVP(ch2);
ofs2.close();
}
代码编译但在运行时我得到:
terminate called after throwing an instance of 'boost::archive::xml_archive_exception'
what(): Invalid XML tag name
当 classOne 不是模板类时,一切正常。有人可以帮忙吗?
【问题讨论】:
标签: c++ templates serialization boost virtual