使用msgpack包装多态类结构

时间:2019-01-14 13:16:55

标签: c++ polymorphism msgpack

我想使用某种多态机制msgpack打包为C ++类结构,以仅将代码打包基类应用一次。

当前,我在基类和子类中两次打包数据。

这是我当前的状态:

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

我想摆脱“代码重复”之间的界限,但是我现在知道如何实现这一点。如果有人有一个主意,那就太好了。

1 个答案:

答案 0 :(得分:2)

您可以分解并调用基类。 但之前需要进行一些拆分:

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