用 msgpack 打包多态类结构
Packing a polymorphous class structure with msgpack
我想使用某种多态机制来打包我的C++类结构,msgpack
只应用一次代码打包基类。
目前,我在基类和子类中打包数据两次。
这是我目前的状态:
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++中的结构的多态成员
- C++多态数据结构
- 结构化绑定语法是否可以在多态 lambda 中使用
- Sean Parent:对于继承层次结构中的多态类型,具有可变对象是极端的例外
- C++标准是否允许复制任意多态数据结构?
- C++ Arduino的结构多态性
- Arduino中的C 结构多态性
- 用 msgpack 打包多态类结构
- 将静态访问者与静态多态性层次结构相耦合
- 基于PHP示例,与C 中数据结构一起工作的多态性示例
- 设计一个没有虚拟析构函数的多态类层次结构
- 在继承层次结构中将方法定义为虚拟方法一次,以使多态性发挥作用
- 具有多态性和不同数据结构的程序设计
- C++ 具有多父多态层次结构的 VTable 实现
- 在c++中,当多态结构不存在时,如何传递它们
- 是否可以为模板化的基类提供专门的类层次结构,但仍利用它们之间的多态性
- C++:在不违反SRP的情况下向多态类层次结构添加方法
- 如何对多态继承层次结构执行灵活的序列化
- 多态和通过带指针的结构体进行强制转换
- 语言律师-正在铸造具有公共基础和布局的非多态结构有效的C++