用g ++重载分辨率

时间:2015-07-10 11:56:50

标签: c++ g++

我正在努力实现序列化类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和另一个派生类BarBar有一个成员变量Baz* baz;Bar有以下方法:

void deserialize(Buffer& buffer) {
  deserializeMember(buffer, baz);
}
void serialize(Buffer& buffer) const {
  serializeMember(buffer, baz);
}

当我执行代码时,对序列化的调用将解析为serializeMember重载,int作为第二个参数。就像我使用模板函数一样,类似于deserializeMember。对deseralizeMember的调用正确解析。

为什么我的Serializable指针不能解析为正确的重载方法?

1 个答案:

答案 0 :(得分:0)

正确的签名是:

void serializeMember(Buffer& sb, const Serializable* const& member) const;

由于serializeMemberBar的const方法,而baz是指向Bar的指针,我们需要按值传递const指针或传递const指针作为const引用。因此,const Serializable* const&