我必须使用某些第三方库中的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

10-08 04:02