【问题标题】:C++ msgpack User-defined classes - can't get startedC++ msgpack 用户定义的类 - 无法开始
【发布时间】:2012-02-17 10:48:28
【问题描述】:

我一直在查看 msgpack 的 C++ 快速入门指南。

http://wiki.msgpack.org/pages/viewpage.action?pageId=1081387

那里,有如下代码sn-p:

#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(...) 宏?我似乎在网上找不到任何东西。

非常感谢,

【问题讨论】:

标签: c++ macros msgpack


【解决方案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);
}

【讨论】:

  • 认为这对于最新的 msgpack 4.x 来说已经过时了
【解决方案2】:

MSGPACK_DEFINE() 为您的类定义了一些实现打包和解包的方法。您在() 中放入的是您想要序列化的成员列表。

之后,您可以像打包或解包 int 一样打包和解包您的课程。所以这个例子应该是有效的。

您可以尝试删除向量并仅打包单个对象 - 我认为这会简化它。

【讨论】:

    猜你喜欢
    • 2011-09-06
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 2017-04-15
    • 2014-10-06
    • 1970-01-01
    相关资源
    最近更新 更多