unt*_*ble 4 c++ stl boost-serialization
我想将boost.serialization与模板化容器类一起使用:
// MyContainer.h
template<class T> struct MyContainer {
T t;
template<class Archive>
void serialize(Archive& archive, const unsigned version) {
archive & t;
}
};
Run Code Online (Sandbox Code Playgroud)
当我使用STL容器作为模板参数时,例如
// Main.cpp
...
MyContainer<array<int,4>> mc;
std::ofstream ofs("foo.bar");
boost::archive::binary_oarchive oa(ofs);
oa << mc;
...
Run Code Online (Sandbox Code Playgroud)
... Visual Studio 11抱怨以下错误消息:
'serialize' : is not a member of 'std::array<_Ty,_Size>'
Run Code Online (Sandbox Code Playgroud)
我试图在两个文件中包含"boost/serialization/array.hpp",但这并没有解决问题.此外,包括数组专门化不是我想要的,因为容器也可以容纳任何其他STL容器.
这样做的正确方法是什么?
虽然serialiation/array.hpp有serialize()重载boost::array,但它没有std::array.
您应该能够使用以下方式提供自己的serialize()重载make_array():
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1442 次 |
| 最近记录: |