使用 msgpack 打包多态 class 结构

Packing a polymorphous class structure with msgpack

我想用 msgpack 打包我的 C++ class 结构,使用一些 多态机制 只应用一次代码打包基础 classes .

目前,我正在将数据打包两次,分别在基础 class 和子class 中。

这是我目前的状态:

class Base {

    public:
        template <typename Packer>
        void msgpack_pack(Packer& pk) const
        {
            pk.pack_map(1);

            pk.pack("key");
            pk.pack("value");
        }
};

class Subclass : public Base {

    public:
        template <typename Packer>
        void msgpack_pack(Packer& pk) const
        {
            pk.pack_map(2);

            // code repetition
            pk.pack("key");
            pk.pack("value");
            //////////////////

            pk.pack("child_key");
            pk.pack("child_value");
        }
};

我想摆脱 "code repetition" 之间的线条,但我现在知道如何实现这一点。如果有人有想法就太好了。

您可以分解并调用基数 class。 但之前需要一些拆分:

class Base
{
protected:
    template <typename Packer>
    void msgpack_pack_content(Packer& pk) const
    {
        pk.pack("key");
        pk.pack("value");
    }
public:
    template <typename Packer>
    void msgpack_pack(Packer& pk) const
    {
        pk.pack_map(1);
        msgpack_pack_content(pk);
    }
};

class Subclass : public Base {
    template <typename Packer>
    void msgpack_pack_content(Packer& pk) const
    {
        Base::msgpack_pack_content(pk);
        //////////////////

        pk.pack("child_key");
        pk.pack("child_value");
    }
public:
    template <typename Packer>
    void msgpack_pack(Packer& pk) const
    {
        pk.pack_map(2);

        msgpack_pack_content(pk);
    }
};