你如何使用cereal库来序列化数组?
例如:
void save(Archive & ar, const unsigned int version) const
{
unsigned int l = g1_size_bin(g,POINT_COMPRESS);
uint8_t data[l];
memset(data, 0, l);
g1_write_bin(data, l, g,POINT_COMPRESS);
ar(l);
ar(data); // what should be here
}
那样做是不行的(我也不指望它能够成功)。同样,也不会有任何效果。
ar(cereal::binary_data(data,l));
我认为这应该可以工作,因为它看起来像是你会使用的boost代码,但实际上会出现编译错误:
/usr/local/include/cereal/cereal.hpp:79:17: 注意:候选函数模板被忽略:替换失败:可变长度类型“unsigned char (&)[l]”不能用作模板参数 BinaryData binary_data( T && data, size_t size )
也不行。
ar.saveBinaryValue(data,l);
因为该方法似乎仅支持XML/Json,而我需要一个二进制存档。
ar
重命名为a
,这段代码看起来会更加清晰易读。 - Hi-Angelcereal
相关的另一件事情,然后我遇到了这个答案。但是我有一个问题。默认情况下,ss
只有std::ios_base :: in | std::ios_base :: out
模式。这不会出现问题吗?它应该具有std::ios_base :: binary
打开模式,不是吗? - Arda Aytekinstd::ios_base::binary
以及适当的输入或输出标志。 - Azoth