Вам нужно будет перегрузить оператор стрелки отдельно. В более общем смысле, даже если в C ++ есть хорошее сопоставление между связанными операторами, если вы перегрузите один оператор, вы не получите перегруженные остальные «бесплатно» и должны реализовать их самостоятельно.
Тем не менее, стрелку легко реализовать с помощью разыменования:
T* Class::operator -> () const {
return &**this;
}
Это работает путем разыменования this
, чтобы получить ссылку на объект-получатель, затем разыменования его, чтобы вызвать operator *
, затем взятия адреса возвращенной ссылки, чтобы получить указатель на объект, к которому должна применяться стрелка.
Возможно, вы захотите заглянуть в библиотеку Boost.Operators , которая позволяет автоматически определять множество логически связанных операторов из небольшого набора базовых операций.
Надеюсь, это поможет!