我在 C++11 中遇到 Cereal 问题 ( http://uscilab.github.io/cereal/ )。
我有一个共享库,我想使用 Cereal 库序列化它的一个类。这是库“我想序列化对象类”的部分代码:
“对象.hpp”
class ObjectPrivate;
class Object
{
public:
...
template <class Archive>
void load(Archive& archive);
template <class Archive>
void save(Archive& archive) const;
protected:
std::unique_ptr<ObjectPrivate> d_ptr;
};
template<>
void Object::load<cereal::BinaryInputArchive>(cereal::BinaryInputArchive& archive);
template<>
void Object::save<cereal::BinaryOutputArchive>(cereal::BinaryOutputArchive& archive) const;
“对象.cpp”
#include"Object_p.hpp"
template <class Archive>
void Object::load(Archive& archive)
{
archive(d_ptr);
}
template <class Archive>
void Object::save(Archive& archive) const
{
archive(d_ptr);
}
“Object_p.hpp”
#include"Object.hpp"
class ObjectPrivate
{
public:
int m_id;
template<class Archive>
void serialize(Archive & ar)
{
ar(m_id);
}
};
但我收到一个错误:
error: undefined reference to void GraphicalObject::save<cereal::BinaryOutputArchive>(cereal::BinaryOutputArchive&) const
error: undefined reference to void GraphicalObject::load<cereal::BinaryInputArchive>(cereal::BinaryInputArchive&)
最佳答案
您声明了模板的两个特化,
template<>
void Object::load<cereal::BinaryInputArchive>(cereal::BinaryInputArchive& archive);
template<>
void Object::save<cereal::BinaryOutputArchive>(cereal::BinaryOutputArchive& archive) const;
但是你忘了实现它们。
关于c++ - Cereal 系列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46512020/