[英]Overload Resolution with 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
派生類和另一個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
指針不能解析為正確的重載方法?
正確的簽名是:
void serializeMember(Buffer& sb, const Serializable* const& member) const;
由於serializeMember
是Bar
的const方法,而baz
是屬於Bar
的指針,我們需要按值傳遞const指針,或將const指針作為const引用傳遞。 因此, const Serializable* const&
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.