Capisco il normale sovraccarico dell'operatore. Il compilatore può tradurli direttamente in metodo call. Non sono molto chiaro sull'operatore ->. Stavo scrivendo il mio primo iteratore personalizzato e sentivo il bisogno di -> operatore. Ho preso uno sguardo al codice sorgente AWL e realizzato il mio simile al primo:In che modo l'utilizzo di arrow-> overloading internamente funziona in C++?
MyClass* MyClassIterator::operator->() const
{
//m_iterator is a map<int, MyClass>::iterator in my code.
return &(m_iterator->second);
}
allora posso utilizzare un'istanza di MyClassIterator come:
myClassIterator->APublicMethodInMyClass().
Sembra che il compilatore fa due passi qui. 1. Chiama il metodo ->() per ottenere una variabile MyClass * temporanea. 2. Chiama APublicMethodInMyClass sulla variabile temp usa il suo operatore ->.
La mia comprensione è corretta?
realtà è 'myClassIterator.operator ->() -> APublicMethodInMyClass()' –
Grazie per la spiegazione. Il myClassIterator.operator ->(). APublicMethodInMyClass() dovrebbe essere myClassIterator.operator ->() -> APublicMethodInMyClass()? Il tipo di ritorno di ->() è MyClass * – Ryan
ottenuto. Grazie Seth. – Ryan