通常の演算子のオーバーロードを理解しています。コンパイラはそれらをメソッド呼び出しに直接変換できます。->演算子についてはよくわかりません。私は最初のカスタムイテレータを書いていましたが、->演算子が必要だと感じました。私はstlソースコードを見て、それのように自分自身を実装しました:
MyClass* MyClassIterator::operator->() const
{
//m_iterator is a map<int, MyClass>::iterator in my code.
return &(m_iterator->second);
}
次に、次のようなMyClassIteratorのインスタンスを使用できます。
myClassIterator->APublicMethodInMyClass().
コンパイラはここで2つのステップを実行するようです。1.->()メソッドを呼び出して、一時的なMyClass*変数を取得します。2.一時変数でAPublicMethodInMyClassを呼び出し、その->演算子を使用します。
私の理解は正しいですか?