我正在使用作为我为C++ 数据库访问 APIMsgPack
创建的自定义后端的一部分。最初,我的一些类将对象作为成员变量,但我在对象的析构函数中遇到了一些问题 - 我认为问题与引用计数其一些对象的方式以及作为被释放多个对象的基础的内存有关次。SOCI
SOCI
MsgPack::sbuffer
SOCI
SOCI
MsgPack
为了解决这个问题,我决定用MsgPack::sbuffer
成员变量替换std::vector<char>
成员变量,并使用这些方法填充MsgPack::sbuffer
s pack_raw_body
。不幸的是,我也遇到了麻烦。
请考虑以下(伪)代码片段...
msgpack::sbuffer buf1;
msgpack::packer<msgpack::sbuffer> bufPkr1(&buf1);
bufPkr1.pack_array(num);
for (int ndx = 0; ndx < num; ++ndx) {
bufPkr1.pack_array(3);
bufPkr1.pack(std::string("foo"));
bufPkr1.pack(std::string("bar"));
bufPrk1.pack(221);
}
std::vector<char> chrVct = std::vector<char>(buf1.size(), *buf1.data());
msgpack::unpacked unPkd1;
msgpack::unpack(&unPkd1, buf1.data(), buf1.size());
msgpack::object toStr1 = unPkd1.get();
std::cout << "MsgPack1: " << toStr1 << std::endl;
msgpack::sbuffer buf2;
msgpack::packer<msgpack::sbuffer> bufPkr2(&buf2);
bufPkr1.pack_raw(chrVct.size());
bufPkr1.pack_raw_body(chrVct.data(), chrVct.size());
msgpack::unpacked unPkd2;
msgpack::unpack(&unPkd2, buf2.data(), buf2.size());
msgpack::object toStr2 = unPkd2.get();
std::cout << "MsgPack2: " << toStr2 << std::endl;
输出...
MsgPack1: [["foo", "bar", 221], ["foo", "bar", 221], ["foo", "bar", 221],..., ["foo", "bar", 221]]
MsgPack2: ""
一般来说,我只是在弄清楚如何使用 MsgPack 对象时遇到了麻烦,并且发现文档/示例有点稀疏。人们可以提供的任何帮助将不胜感激!