プロトタイプは、ポインタ型で少し奇妙です。我々は
void serialize(const Map& myMap, char* buf, size_t bufSize);
Map deserialize(char const* buf, size_t bufSize);
にそれらを修正するために想定することができた場合はここで、ブーストのシリアル化を使用してそれらを実装するデモプログラムです:
Live On Coliru
#include <unordered_map>
#include <string>
#include <iostream>
typedef std::unordered_map<int, std::string> Map;
void serialize(const Map& myMap, char* buf, size_t bufSize);
Map deserialize(char const* buf, size_t bufSize);
int main() {
char buffer[4096];
serialize({ { 1, "one" }, { 2, "two" }, /* etc */ }, buffer, sizeof(buffer));
auto data = deserialize(buffer, sizeof(buffer));
for (auto p : data)
std::cout << p.first << " -> " << p.second << "\n";
}
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/iostreams/device/array.hpp>
#include <boost/iostreams/stream.hpp>
#include <boost/serialization/unordered_map.hpp>
#include <boost/serialization/string.hpp>
void serialize(const Map& myMap, char* buf, size_t bufSize)
{
boost::iostreams::stream<boost::iostreams::array_sink> os(buf, bufSize);
boost::archive::binary_oarchive oa(os);
oa << myMap;
}
Map deserialize(char const* buf, size_t bufSize)
{
boost::iostreams::stream<boost::iostreams::array_source> is(buf, bufSize);
boost::archive::binary_iarchive ia(is);
Map data;
ia >> data;
return data;
}
プリント
1 -> one
2 -> two
質問が編集されました。前に明快さの欠如についてお詫び申し上げます。 – user3685928