Недавно я столкнулся с необходимостью применения указателя к элементу к объекту, указанному итератором. Я пробовал естественный синтаксис:
ite->*ptr = 42;
К моему ужасу, он не скомпилировался. Итераторы не перегружают operator->*
, но более удивительно не делают интеллектуальных указателей. Мне нужно было прибегнуть к следующей болтовне:
(*ite).*ptr = 42;
Эксперимент (см. приведенный ниже пример) показал, что такой синтаксис, по-видимому, доступен для пользовательских классов как для указателей-для-членов, так и для указателей-членов-членов, по крайней мере, с С++ 14.
Таким образом:
- Есть ли причина, по которой стандартные классы-указатели не перегружают
operator->*
, или это просто недосмотр? - Должен ли я перегружать
operator->*
при определении моих собственных классов, похожих на указатель, или же эта же причина применима ко мне?
Живой пример - что компилирует, что нет, и доказательство концепции для пользовательского класса.