使用Boost和iostreams序列化为静态数据
Serialization into static data using Boost and IOStreams
我正在尝试采用复杂的嵌套结构,并将其直接存储在.cpp文件中作为静态数据。我想采用的方法是将我的对象(已经支持Boost序列化)并将其序列化为二进制档案中的字节数组。然后,我可以采用该字节阵列,然后穿过它以自动化所需的.CPP代码以容纳二进制阵列。然后,我想从该字节数组回到对象。
基本上,在一天结束时,我想要这样的东西:
unsigned char* my_obj = { 10, 48, 48, 30, 20 ... }
当我想使用该数据时,我将其将其包装在"字节流"中,然后再次将其传递到Boost中,以重新启动回到我的实际对象中。
我的问题是:是否有一些简单的方法可以将字节阵列作为流?Boost涉及用于阅读和写档案的iStreams和ostreams。我不想使用弦流或文件流,而是我想是一个自定义流,仅充当传递给它的巨型字节数组。
我觉得应该有一种创建此自定义流并与Boost序列化无缝合作的好方法...我只是不确定从哪里开始?
unsigned char* my_obj = {10,48,48,30,20 ...}
最好使用:
unsigned char my_obj[] = { 10, 48, 48, 30, 20 ... }
因此,您将拥有数组,它知道它的大小,而不仅仅是指针开始。另外,如果您不打算对其进行修改,请添加句子。
我的问题是:是否有一些简单的方法可以将字节阵列作为流?Boost涉及用于阅读和写档案的iStreams和ostreams。我不想使用弦流或文件流,而是我想是一个自定义流,仅充当传递给它的巨型字节数组。
检查boost的array_source和array_sink。
现场演示:
#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/iostreams/device/array.hpp>
#include <boost/iostreams/stream.hpp>
#include <iostream>
#include <ostream>
using namespace boost;
using namespace std;
struct Data
{
double value;
template<class Archive>
void serialize(Archive & ar, const unsigned int)
{
ar & value;
}
};
int main()
{
Data d={3.1415926};
char buffer[256];
{
iostreams::array_sink sink(buffer);
iostreams::stream<iostreams::array_sink> stream(sink);
archive::binary_oarchive out_archive(stream);
out_archive << d;
}
Data restored = {0.0};
{
iostreams::array_source source(buffer);
iostreams::stream<iostreams::array_source> stream(source);
archive::binary_iarchive in_archive(stream);
in_archive >> restored;
}
cout << boolalpha << ( restored.value == d.value ) << endl;
}
输出是:
true
相关文章:
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 静态数据成员模板专用化的实例化点在哪里
- 内联静态数据的初始化
- 调用在 HXX 文件中声明的静态数据成员
- 虚拟成员函数的定义是否强制在同一转换单元中动态初始化静态数据成员?
- 错误: 无效使用非静态数据成员"应用程序::应用程序构造函数"
- 静态数据成员:它"const declaration / constexpr definition"起作用?
- 何时需要定义类的静态数据成员 (un/-)
- 为什么静态数据成员不能在c++11中的类中初始化
- 访问模板化类的非模板基的静态数据
- 静态数据成员的模板专用化
- 拒绝包含某些公共静态数据成员的类型
- GCC:在调试构建中优化的静态数据成员
- 类模板静态数据成员定义/声明/初始化
- 是否允许在作为静态数据结构成员的lambda函数中捕获变量
- C++ 中的静态数据成员
- 如果类在 C++ 中具有常量或引用类型的非静态数据成员,为什么编译器不提供默认赋值运算符?
- 使用 lambda 函数初始化静态数据成员
- 引用静态数据成员
- 学习C++并在早期示例中遇到错误(在非静态数据成员之前需要构造函数)