Rozumiem normalne przeciążenie operatora. Kompilator może tłumaczyć je bezpośrednio na wywołanie metody. Nie jestem bardzo pewny co do operatora ->. Pisałem swój pierwszy niestandardowy iterator i czułem potrzebę korzystania z operatora ->. Wziąłem przyjrzeć kodu źródłowego STL i wdrożone moje własne jak niej:W jaki sposób przeciążanie operatorów strzałek-> działa wewnętrznie w C++?
MyClass* MyClassIterator::operator->() const
{
//m_iterator is a map<int, MyClass>::iterator in my code.
return &(m_iterator->second);
}
Wtedy możemy użyć instancji MyClassIterator jak:
myClassIterator->APublicMethodInMyClass().
Wygląda na to, że kompilator robi dwa kroki tutaj. 1. Wywołaj metodę ->(), aby uzyskać tymczasową zmienną MyClass *. 2. Wywołaj APublicMethodInMyClass na zmiennej temp za pomocą operatora ->.
Czy moje zrozumienie jest prawidłowe?
Właściwie to 'myClassIterator.operator ->() -> APublicMethodInMyClass()' –
Dzięki za wyjaśnienie. Czy myClassIterator.operator ->(). APublicMethodInMyClass() beClassIterator.operator ->() -> APublicMethodInMyClass()? Zwracany typ ->() to MyClass * – Ryan
. Dzięki Seth. – Ryan