我想使用某种多态机制将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");
}
};
我想摆脱“代码重复”之间的界限,但是我现在知道如何实现这一点。如果有人有一个主意,那就太好了。
答案 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);
}
};