我正在尝试使用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。但是,当此代码在&#34;反序列化&#34;期间运行时vector将是size()== 0的colvec,例如所需的行数将是未知的。
我想知道处理这个问题的最佳方法是什么。
我的理解可能会弄错。我是Armadillo和Boost的新手。
答案 0 :(得分:1)
我建议拆分加载/保存。对于数组,您还需要先存储大小,以便能够知道反序列化时必须读取的组件数。对于连续的内存布局,请使用优化的
window.onload = function countChecked() {
var n = $("input.theme:checked").length;
if (n == 1) {
$('input.theme:checkbox:not(:checked)').prop('disabled', true);
} else {
$('input.theme:checkbox:not(:checked)').prop('disabled', false);
}
}
$("input.theme:checkbox").click(countChecked);
$('.Go').click(function() {
var i=1;
$('input[type="checkbox"]:checked').each(function(){
$('select#list'+i).val($(this).val());
i++;
});
});
this is the first html for checkbox
<input class="theme" type="checkbox" name="theme" value="Present" id="Present" />
<label for="Present">Present</label>
<input class="theme" type="checkbox" name="theme" value="Absent" id="Absent" />
<label for="Absent">Absent</label>
<input class="theme" type="checkbox" name="theme" value="Leave" id="Leave" />
<label for="Leave">Leave</label>
<input class="theme" type="checkbox" name="theme" value="Holiday" id="Holiday" />
<label for="Holiday">Holiday</label>
<br><br> <input type="button" class="Go" value="Go" />
功能。最后,如果要支持XML存档使用
<select id='list1' name='att_status[]'>
<option value='Present'>Present</option>
<option value='Absent'>Absent</option>
<option value='Holiday'>Holiday</option>
<option value='Leave'>Leave</option>
</select>
你可以看看
boost::serialization::make_array(T*,size)
看看Boost如何序列化std :: vector,代码很容易阅读。
我从来没有使用过Armadillo但是未优化的代码(我对内存布局没有任何线索等等)肯定会接近:
boost::serialization::make_nvp(char*, T)
// or the BOOST_SERIALIZATION_NVP macro