【发布时间】:2017-06-30 20:00:45
【问题描述】:
我正在尝试使用 Boost 序列化/反序列化 Armadillo colvec 对象。 colvec 是具有几个不同大小的列向量,例如它可以有 2 行用于 2d 向量,3 行用于 3d 向量,我还在代码中使用其他特定的向量大小。
当反序列化期间colvec中的行数未知时,我不确定如何处理boost中colvec类型的序列化。
例如要序列化,我可能包括以下内容:-
namespace boost
{
namespace serialization
{
template<class Archive>
void serialize(Archive& archive, colvec& vector, unsigned int)
{
for (int i=0; i<vector.size(); i++)
{
archive& vector[i];
}
}
}
}
这将序列化具有任意行数的 colvec。但是,当此代码在“反序列化”期间运行时,向量将是 size()==0 的 colvec,例如所需的行数将是未知的。
我想知道处理这个问题的最佳方法是什么。
我的理解可能有误。我对犰狳和 Boost 都是新手。
【问题讨论】:
-
是的,抱歉,colvec 是 Mat 类的 Armadillo typedef。在这个例子中我没有使用 std::vector ...
-
什么是colvec?
arma::Col? -
是的,它是从 Mat 派生的 Col 的 typedef。
-
问题似乎是(尽管我可能会遗漏一些东西)是 Boost Serialization 将调用 colvec 的默认构造函数,这将生成一个具有 1 列的 Mat 结构。似乎默认构造函数不会为 colvec 创建行,因此它在反序列化期间显示为具有 1 列和 0 行的 Mat。因此反序列化失败。
标签: c++ boost deserialization armadillo