使用boost.serialization和STL容器作为模板参数

Using boost.serialization with STL containers as template parameters

本文关键字:参数 boost serialization STL 使用      更新时间:2023-10-16

我想将boost.serialization与模板化容器类一起使用:

// MyContainer.h
template<class T> struct MyContainer {
    T t;
    template<class Archive>
    void serialize(Archive& archive, const unsigned version) {
        archive & t;
    }
};

当我使用STL容器作为模板参数时,例如

// Main.cpp
...
MyContainer<array<int,4>> mc;
std::ofstream ofs("foo.bar");
boost::archive::binary_oarchive oa(ofs);
oa << mc;
...

Visual Studio 11报告以下错误消息:

'serialize' : is not a member of 'std::array<_Ty,_Size>'

我曾尝试在这两个文件中都包含"boost/serialization/array.hpp",但这并没有解决问题。此外,包括数组专用化不是我想要的,因为容器也可以容纳任何其他STL容器。

正确的方法是什么?

虽然serialization/array.hpp对boost::arrayserialize()重载,但对std::array没有。

您应该能够使用make_array()提供自己的serialize()过载:

namespace boost {
namespace serialization {
template<class Archive, class T, size_t N>
void serialize(Archive & ar, std::array<T,N> & a, const unsigned int version)
{
  ar & boost::serialization::make_array(a.data(), a.size());
}
} // namespace serialization
} // namespace boost