gpt4 book ai didi

c++ - 使用 msgpack 打包多态类结构

转载 作者:行者123 更新时间:2023-11-28 01:25:12 33 4
gpt4 key购买 nike

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

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

最佳答案

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

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

关于c++ - 使用 msgpack 打包多态类结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54182305/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com