Зачем?
Элементарно, Ватсон:
- есть огромный практический проект...
- который писали много лет (до 10-12) разные люди (числом до 100), многих (большинство) из которых на сегодня и в фирме нет, чтобы спросить...
- проект нужно поддерживать и развивать...
- а по телу проекта раскидано множество for_each() использующих функторы обрабатывающие элементы контейнеров STL...
И всё бы хорошо ... до тех пор, пока не требуются (для диагностики, отладки, расширения функциональности) получить информацию (новые данные) об итогах обработки, причём получить непосредственно из класса функтора, не залезая в само содержимое контейнеров.
Простейшая формулировка (модельной) задачи: есть вектор случайных положительных целых в диапазоне 0...100. Класс-функтор, пробегая вектор, обращает нечётные значения в отрицательные, меняет знак.
Вопрос: узнать по итогу выполнения операции сколько чисел было обращено? (не залезая с подсчётами в сам контейнер ... считаем что он недоступен ... или его элементы имеют весьма сложную структуру чтобы её ковырять).