重载解析与g++

Overload Resolution with g++

本文关键字:g++ 重载      更新时间:2023-10-16

我正在实现一个序列化类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指针不能解析到正确的重载方法?

正确的签名是:

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

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