c++ - Cereal 系列化

标签 c++ c++11 serialization cereal

我在 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/

相关文章:

java - 序列化Java标准类时LocalClass不兼容

java - 如何使用 JAXB 从服务返回的 'anyType' 创建 java 对象?

c++ - && 声明的变量

c++ - 内置式效率

c++ - 在模板化类与非模板化类中的 lambda 属性中捕获它

java - Spring Boot : Default serialization for java. time.Duration 从 String 更改为 Number

c++ - 指针还是索引?

c++ - 在迷宫 C++ 中查找路径是否存在

c++ - 有没有一种好方法可以在 C++11 中打印出类似 JSON 的 trie 结构(仅限迭代解决方案)的扁平命名空间?

c++ - 如何使用 `std::function` 作为函数参数创建可变参数模板函数?