我正在努力实现序列化类Serializable
。该类具有以下方法签名:
void serializeMember(Buffer& sb, const Serializable*& member) const;
void serializeMember(Buffer& sb, const int& member) const;
template<typename T>
void deserializeMember(Buffer& sb, T*& member);
我有一个派生类Baz
和另一个派生类Bar
。 Bar
有一个成员变量Baz* baz;
。 Bar
有以下方法:
void deserialize(Buffer& buffer) {
deserializeMember(buffer, baz);
}
void serialize(Buffer& buffer) const {
serializeMember(buffer, baz);
}
当我执行代码时,对序列化的调用将解析为serializeMember
重载,int
作为第二个参数。就像我使用模板函数一样,类似于deserializeMember
。对deseralizeMember
的调用正确解析。
为什么我的Serializable
指针不能解析为正确的重载方法?
答案 0 :(得分:0)
正确的签名是:
void serializeMember(Buffer& sb, const Serializable* const& member) const;
由于serializeMember
是Bar
的const方法,而baz
是指向Bar
的指针,我们需要按值传递const指针或传递const指针作为const引用。因此,const Serializable* const&
。