使用boost.serialization和STL容器作为模板参数
Using boost.serialization with STL containers as template parameters
我想将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::array
有serialize()
重载,但对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
相关文章:
- 泛化传递给 boost::bind 的参数
- boost::p rogram_options 在指定意外的位置参数时不报告任何错误
- 如何通过 boost::p ython 重命名构造函数的关键字参数
- 无法将参数传递给 boost::thread 构造函数
- 在 Windows 中使用 boost::p rogram_options 从命令行参数读取 Unicode 字符
- C++ Boost - 序列化错误 - 将"const B"作为"this"参数
- 如何正确地将 boost::optional<std::chrono::d uration> 作为函数参数?
- Boost::Asio串行读/写打开:参数不正确
- 使用单独的参数调用"boost::process::system()"时,获取"execv
- boost::asio::async_write无效参数
- 在可变参数模板函数中存储参数而不使用 boost::any
- 可变参数宏:重用可变参数(Boost.Fusion)
- boost::p rogram_options 验证每个参数而不是每个参数类型?
- 在 boost::<double>asio::buffer 中使用像 std::vector<std::complex> 这样的参数
- 将 std::bind 应用于带有参数 <boost::asio::ip::tcp::socket> 时出错?
- 如何创建一个版本的 boost::range::transform,该版本具有用于捕获上下文的额外参数
- 如何使用 boost::bind 附加参数?
- 是否可以使用 Boost.Hana 将 std::array 解压缩到非类型模板参数包中
- 参数从 Python 脚本传递到 C++ 使用 boost-python
- 当Boost ::绑定模板函数时,模板参数扣除/替换失败