Entiendo la sobrecarga normal del operador. El compilador puede traducirlos a la llamada al método directamente. No tengo muy claro el operador ->. Estaba escribiendo mi primer iterador personalizado y sentí la necesidad de -> operador. Tomé un vistazo al código fuente AWL e implementé mi propia semejante:¿Cómo funciona la sobrecarga de flecha-> operador internamente en C++?
MyClass* MyClassIterator::operator->() const
{
//m_iterator is a map<int, MyClass>::iterator in my code.
return &(m_iterator->second);
}
Entonces puede utilizar una instancia de MyClassIterator como:
myClassIterator->APublicMethodInMyClass().
Parece que el compilador hace dos pasos de aquí. 1. Llame al método ->() para obtener una variable temporal MyClass *. 2. Llame al APublicMethodInMyClass en la variable de temperatura y use su operador ->.
¿Es correcto mi entendimiento?
en realidad es 'myClassIterator.operator ->() -> APublicMethodInMyClass()' –
Gracias por la explicación. ¿Debería el myClassIterator.operator ->(). APublicMethodInMyClass() ser myClassIterator.operator ->() -> APublicMethodInMyClass()? El tipo de devolución de ->() es MyClass * – Ryan
. Gracias Seth. – Ryan