我必须使用某些第三方库中的Matrix4x4类,并且需要对其进行序列化。
1. 是否可以创建包含第三方库(例如Matrix4x4)所需的所有序列化的 header (3rdparty_serialization.h):
namespace boost {
namespace serialization {
template<class Archive>
void serialize(Archive & ar, Matrix4x4 & m, const unsigned int version)
{
for(size_t i = 0; i < 4;++i)
for(size_t j = 0; j < 4;++j)
{
auto& e = m[i][j];
ar & BOOST_SERIALIZATION_NVP(e);
}
}
} // namespace serialization
} // namespace boost
2. Matrix4x4的函数“serialize”的此定义正确吗?
3. 如何自定义Matrix4x4序列化的格式?
现在,我输出:
<m class_id="2" tracking_level="0" version="0">
<e>1</e>
<e>0</e>
<e>0</e>
<e>0</e>
<e>0</e>
<e>1</e>
<e>0</e>
<e>0</e>
<e>0</e>
<e>0</e>
<e>1</e>
<e>0</e>
<e>0</e>
<e>0</e>
<e>0</e>
<e>1</e>
</m>
我想要这样的东西:
<m class_id="2" tracking_level="0" version="0">
<e>1;0;0;0</e>
<e>0;1;0;0</e>
<e>0;0;1;0</e>
<e>0;0;0;1</e>
</m>
或其他更简洁易读的形式。
最佳答案
1. 是。
2. 是,假设Matrix
不在 namespace 内。
3. 您可以尝试序列化std::string
而不是单个元素。但是,这有点浪费,因为您将需要格式化和解析字符串。如果您想使用例如尺寸也不是最佳binary_[io]archive
。