我一直在查看msgpack的C ++快速入门指南。
http://wiki.msgpack.org/pages/viewpage.action?pageId=1081387
在那里,有以下代码片段:
#include <msgpack.hpp>
#include <vector>
#include <string>
class myclass {
private:
std::string str1;
std::string str2;
public:
MSGPACK_DEFINE(str1,str2);
};
int main(void) {
std::vector<myclass> vec;
// add some elements into vec...
/////
/* But what goes here??? */
/////
// you can serialize myclass directly
msgpack::sbuffer sbuf;
msgpack::pack(sbuf, vec);
msgpack::unpacked msg;
msgpack::unpack(&msg, sbuf.data(), sbuf.size());
msgpack::object obj = msg.get();
// you can convert object to myclass directly
std::vector<myclass> rvec;
obj.convert(&rvec);
}
我想序列化myclass对象的向量。
我尝试了以下内容:
...
vector<myclass> rb;
myclass mc;
...
int main(){
...
mc("hello","world");
rb.push_back(mc)
...
}
但这不起作用(“错误:呼叫不匹配”)
另外,如果我这样做:
mc.str1="hello"
mc.str2="world"
它不起作用,因为str1和str2是私有的。
如何正确使用此MSGPACK_DEFINE(...)宏?我似乎无法在网上找到任何东西。
非常感谢,
答案 0 :(得分:1)
class myclass {
private:
std::string str1;
std::string str2;
public:
myclass(){};
myclass(string s1,string s2):str1(s1),str2(s2){};
MSGPACK_DEFINE(str1,str2);
};
int main(int argc, char **argv)
{
std::vector<myclass> vec;
myclass m1("m1","m2");
vec.push_back(m1);
// you can serialize myclass directly
msgpack::sbuffer sbuf;
msgpack::pack(sbuf, vec);
msgpack::unpacked msg;
msgpack::unpack(&msg, sbuf.data(), sbuf.size());
msgpack::object obj = msg.get();
// you can convert object to myclass directly
std::vector<myclass> rvec;
obj.convert(&rvec);
}
答案 1 :(得分:0)
MSGPACK_DEFINE(
)定义了一些为您的类实现打包和解包的方法。您放在()
中的内容是您要序列化的成员列表。
之后,您可以打包和打开课程,就像打包或打开int
一样。所以这个例子应该有效。
您可以尝试删除矢量并仅打包一个对象 - 我认为这会简化它。