Любой индексируемый контейнер может с пользой определить operator[]
, чтобы его можно было использовать в любом шаблоне, использующем []
-синтаксическую индексацию.
Вам не нужен этот синтаксис, если вы не занимаетесь общим программированием - он может выглядеть хорошо, но, если не считать косметики, вы всегда можете определить конкретные именованные методы такие как getAt
, setAt
и т. п., с аналогичными и более простыми для кода функциями.
Тем не менее, универсальное программирование лежит в основе современного C ++ ... и оно имеет жуткое сходство с "утилитарной типизацией во время компиляции" (я склонен к такой своеобразной терминологии, конечно, имея участие в его формировании - cfr wikipedia ; -).
Точно так же, как вы должны попытаться использовать, например, префикс- *
, чтобы означать «разыменование» для всех видов итераторов и других типов, подобных указателям (так что они могут быть заменены указателями в шаблоне с утиной типизацией!) Точно так же вы должны стремиться определить operator[]
в типах контейнеров, где это имеет смысл, просто так, чтобы они могли быть заменены массивами из утилит в соответствующих шаблонах.