我正在尝试boost::container::vector<int>
使用 Cereal 序列化一个(我知道 boost 提供了一个类似于 Cereal 的序列化库,但是整个项目都使用 Cereal 并且它的一个角落恰好依赖于 boost 向量)。
我已经为 定义了模板化save
和load
函数boost::container::vector<int>
,但 Cereal 失败并出现静态断言,说它找不到保存/加载函数对、序列化函数或 save_minimal/load_minimal 函数对。
这是一个展示这个问题的简单代码。为了比较,我还定义了一个模板结构 myStruct ,它采用与 a 相同类型的模板参数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
和,因为我虽然和方法可能与 boost 提供的函数发生冲突,但即使使用重命名的函数也不起作用。CEREAL_SAVE_FUNCTION_NAME
save
load