msgpack反序列化c ++

时间:2012-12-21 02:38:34

标签: c++ msgpack messagepack

当我从缓冲区解析时,我必须知道缓冲区的确切类类型(myclass)是什么。所以我不能以统一的方式处理所有的缓冲区解析。我必须区分每个类的类型(可以吗?)。

我的问题是“如何以统一的方式处理所有缓冲区解析,而不需要关心确切的类类型。”有什么解决方案吗?谢谢你的帮助!

   class myclass {
private:
    std::string m_str;
    std::vector<int> m_vec;
public:
    MSGPACK_DEFINE(m_str, m_vec);
};

int main(void) {
        std::vector<myclass> vec;
        // add some elements into vec...

        // 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);
}

我预计它会像这样工作

class base 
{
.....
};

class A:public base
{
....
};

class B:public base
{
....
};


base* parse(msgpack::sbuffer sbuf)
{
...
}


int main(void)
 {
    A a;
        msgpack::sbuffer sbuf;
        msgpack::pack(sbuf, a);
    base* a1 = parse(sbuf);
    ....    

    B b;
        msgpack::sbuffer sbuf;
        msgpack::pack(sbuf, b);
    base* b1 = parse(sbuf);
    ....        
}

0 个答案:

没有答案