boost::container::vector 无法用谷物序列化?
boost::container::vector cannot be serialized with Cereal?
我正在尝试使用 Cereal 序列化boost::container::vector<int>
(我知道 boost 提供了一个类似于 Cereal 的序列化库,但整个项目使用 Cereal,它只有一个角落恰好依赖于 boost 向量(。
我已经为boost::container::vector<int>
定义了模板化的save
和load
函数,但 Cereal 失败并出现静态断言,指出它找不到函数的保存/加载对、序列化函数或 save_minimal/load_minimal 对函数。
下面是演示此问题的简单代码。为了进行比较,我还定义了一个模板结构myStruct,它采用相同类型的模板参数作为boost::container::vector
,以检查相同的代码是否适用于我自己的类型。
#include <cereal/archives/binary.hpp>
#include <sstream>
#include <boost/container/vector.hpp>
namespace bc = boost::container;
template<typename T, typename V = void, typename W = void>
struct myStruct {};
template<typename A>
void save(A& ar, const myStruct<int>& v) {}
template<typename A>
void load(A& ar, myStruct<int>& v) {}
template<typename A>
void save(A& ar, const bc::vector<int>& v) {}
template<typename A>
void load(A& ar, bc::vector<int>& v) {}
int main()
{
std::stringstream ss;
{
cereal::BinaryOutputArchive oarchive(ss);
bc::vector<int> myData;
//myStruct<int> myData;
oarchive(myData);
}
{
cereal::BinaryInputArchive iarchive(ss);
bc::vector<int> myData;
//myStruct<int> myData;
iarchive(myData);
}
}
编辑:请注意,我也试图重新定义CEREAL_SERIALIZE_FUNCTION_NAME
,CEREAL_LOAD_FUNCTION_NAME
,并在包含任何谷物标头之前CEREAL_SAVE_FUNCTION_NAME
,因为我认为save
和load
方法可能与 boost 提供的函数冲突,但即使使用重命名的函数也不起作用。
您必须在namespace cereal
或namespace boost::container
中定义save
/load
函数。
相关文章:
- 如何在C++中序列化结构数据
- 序列化,没有库的整数,得到奇怪的结果
- 如何知道QDataStream不能反序列化某些内容
- 如何使用Python从C++中读取谷物序列化数据
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 带有Protobuf序列化的C++Hazelcast:字符串不是UTF-8格式的
- 自定义对象的dlib序列化在gcc中失败
- C++boost序列化多态性问题
- 增强基于 XML class_id的反序列化
- 提升反序列化对象具有 nan 或 -nan 值
- 在 cpp 中的平面缓冲区中序列化对象
- 每次进行继承时都需要提升::序列化::base_object吗?
- 如何在 c++ 非托管代码中反序列化 byte[] 的 json 字符串?
- 提升序列化 1:73 的向后兼容性问题
- 将 boost 序列化对象的 asio::streambuf 表示转换为 Beast 的 DynamicBody req.body()
- 为什么 nlohmann/json 序列化 "null" 而不是在 double 上"0"?
- 如何反序列化数组?
- 如何使用提升序列化?
- 序列化多晶型接口
- boost::container::vector 无法用谷物序列化?